iOS 套件 — Alamofire ( 2 )
request 進階以及 response 介紹
前言
在上篇文章中已經大略介紹了 Alamofire 該怎麼使用,也講述了 request 中所有參數所具備的功能以及該如何使用。接下來,在這篇文章中,我們會更深入地講 request 還具有哪些可以供我們操作的方式,也會介紹另一部份 response 也什麼樣的功能。那麼就讓我們開始吧!
Request 進階
Authentication
在 request 方面 Alamofire 也透過 authenticate
這個函式支援了 HTTP Basic Authentication ,舉例來說,我們可以用下圖的方式來進行使用者的認證。
除此之外,依據伺服器實作的方式不同,也可以透過 Authorization
這樣的標頭來進行認證,如下圖。
在這邊我們便會發現,在合宜的情況下 Alamofire 會自動使用 URLCredential
將 user
及 password
加密成標頭檔,如上圖一樣。同樣的道理,剛剛介紹過的 authenticate
這個函式也一樣有經過加密。
Response 介紹
在 request 之後,便要來講述 response 的部分了。在 Alamofire 中每個傳送給伺服器的 request 都是以非同步的方式來處理 response ,亦即是說就算程式裡照順序傳遞 A 和 B 兩個 request ,有可能是 B 的 response 比 A 來的早回傳。
非同步的 request 有許多好處,其中最大的便是可以讓不相關的 reuqest 各自進行而不用依序等待,舉例來說 A 和 B 兩個 request 如果之間並沒有關聯性,那麼我們便會希望兩者可以各自進行,而不想讓 A 有 response 後才傳出 B 這個 reuqest 。然而,非同步的方式是需要比進謹慎去撰寫的,需要特別小心去檢視每個 request 之間的關係,以避免因非同步而產生的錯誤。
Alamofire 中 response 的使用方法很簡單,便是接在 request 的後面即可,就像文章前面幾鐘圖片中使用即可。 response 有多種不同的函式,拿來使用的時間不盡相同,可以依照自己的需求來決定要使用哪種。
response
responseData
responseString
responseJSON
responsePropertyList
這其中我們可以依照 request 的不同來使用不同的 repsonse ,像是一般 App 與伺服器透過 JSON 的方式溝通時,便會使用 responseJSON
;如果伺服器僅會回傳一段字串的話,便可以使用 responseString
;若是不確定伺服器會回傳什麼樣的格式便可以使用 response
,接著在函式中再多做處理。
在回傳的函式中有許多處理 response 成功或失敗的方法,而我最常使用的便是以下這種:
Alamofire.request("https://httpbin.org/post", method: .post, parameters: ["test": "1"]).responseJSON {
response in
switch response.result { \\透過switch來處理result成功或失敗
case .success(let value): \\result成功同時確定value不為nil
print(value)
case .failure(let error): \\result失敗同時確定error不為nil
print(error)
}
}
這樣的寫法我覺得還蠻精簡的,也能夠處理 nil
的問題,但是這樣的方法並不能使用在 response
中,只能使用在 responseJSON
及 responseString
裡。
除此之外, response
預設是執行在 main dispatch queue 中,我們也可以更改成我們想要設定的 dispatch queue ,如下。
let utilityQueue = DispatchQueue.global(pos: .utility)
Alamofire.request("https://httpbin.org/get").responseJSON(queue: utilityQueue) {
response in
print("Executing response handler on utility queue")
}
如此,我們便可以將這個 response 的 dispatch queue 改為 utilityQueue ,便可以不與其他工作一起佔用 main dispatch queue 。
看完了以上的講解,已經可以在 App 中把 Alamofire 運用的很純熟了,基本上便是分為 request 及 response 兩塊,而其中最要注意的便是非同步這件事情,之前在寫的時候便很容易因為非同步而出現問題QQ
接下來還會再帶大家介紹更多 Alamofire 的應用,像是 download 以及 upload 等,希望大家會喜歡~
後記
在寫 Alamofire 這一系列的文章時候,其實心裡還蠻害怕的XD 因為有些東西我自己也沒有真正實際在 App 中使用過,有些是邊寫文章時邊寫程式來做測試,同時也上網看了許多相關的文獻。但我覺得我在 Swift 的基礎功並沒有打得很好,因此有很多觀念可能有錯誤或是有些微的瑕疵,希望大家能夠看完文章後指證出來,互相進步,謝謝: )