iOS 套件 — Alamofire ( 2 )

request 進階以及 response 介紹

郭毓棠
Practicode
5 min readJul 15, 2017

--

前言

在上篇文章中已經大略介紹了 Alamofire 該怎麼使用,也講述了 request 中所有參數所具備的功能以及該如何使用。接下來,在這篇文章中,我們會更深入地講 request 還具有哪些可以供我們操作的方式,也會介紹另一部份 response 也什麼樣的功能。那麼就讓我們開始吧!

Request 進階

Authentication

在 request 方面 Alamofire 也透過 authenticate 這個函式支援了 HTTP Basic Authentication ,舉例來說,我們可以用下圖的方式來進行使用者的認證。

如果成功驗證後,伺服器應該會回傳成功訊息

除此之外,依據伺服器實作的方式不同,也可以透過 Authorization 這樣的標頭來進行認證,如下圖。

在 header 增加了一項 Authorization

在這邊我們便會發現,在合宜的情況下 Alamofire 會自動使用 URLCredentialuserpassword 加密成標頭檔,如上圖一樣。同樣的道理,剛剛介紹過的 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 成功或失敗的方法,而我最常使用的便是以下這種:

這樣的寫法我覺得還蠻精簡的,也能夠處理 nil 的問題,但是這樣的方法並不能使用在 response 中,只能使用在 responseJSONresponseString 裡。

除此之外, response 預設是執行在 main dispatch queue 中,我們也可以更改成我們想要設定的 dispatch queue ,如下。

如此,我們便可以將這個 response 的 dispatch queue 改為 utilityQueue ,便可以不與其他工作一起佔用 main dispatch queue 。

看完了以上的講解,已經可以在 App 中把 Alamofire 運用的很純熟了,基本上便是分為 request 及 response 兩塊,而其中最要注意的便是非同步這件事情,之前在寫的時候便很容易因為非同步而出現問題QQ
接下來還會再帶大家介紹更多 Alamofire 的應用,像是 download 以及 upload 等,希望大家會喜歡~

後記

在寫 Alamofire 這一系列的文章時候,其實心裡還蠻害怕的XD 因為有些東西我自己也沒有真正實際在 App 中使用過,有些是邊寫文章時邊寫程式來做測試,同時也上網看了許多相關的文獻。但我覺得我在 Swift 的基礎功並沒有打得很好,因此有很多觀念可能有錯誤或是有些微的瑕疵,希望大家能夠看完文章後指證出來,互相進步,謝謝: )

--

--