URLSession 教學(swift 3, iOS)- part 1

Jerry Wang
6 min readMar 3, 2017

--

在app開發中,不可避免的一定會遇到與後端合作的情況,不論是下載檔案,上傳圖片,獲取即時訊息,這些都需要連網,透過後端提供的API (Application Programming Interface、應用程式介面)來獲取資訊。

網路的世界,極大部分透過http協定來傳輸資料,簡單來說,用戶發請求(request),伺服器接收到請求,回傳回應(response),用戶得到的回應及我們所需要的資訊。

http協定有1.1, 2.0..等不同的版本,也有各種請求的方法…..等,詳細的內容在此不贅述,有興趣的網路上資源很多。

在網路的世界,最怕的就是個人資訊外洩,不安全。因而衍伸出了https這個加密連線的協定。

值得注意的是,apple規定,自2017 / 01 /01開始,所以上架的app皆要使用ATS安全通訊技術,使app及網頁通訊以HTTPS加密連線。有興趣的可看看如下的WWDC 2016影片

以上為前言,接著正式來介紹在iOS中如何與伺服器溝通,獲取資料….等所有網路行為。

在iOS中,負責連網相關的重要角色為URLSession,沒有了他很多事都不能做。以下為官方文件及guideline,寫得非常清楚,請務必仔細詳讀!

如上所提,整個行為的流程為,在iOS端發出request,伺服器接收到request後回傳response,iOS接收到的response內部就包含我們所需要的訊息。

下為官方guideline提供的架構圖,可看出如何分工,有負責URL Loading,有負責登入的,有負責處理一些細部設定的,有處理cookie和處理cache的,但這張圖有點過時,還是有前綴的NS,且還有NSURLConnection。

關於URLSession和NSURLConnection的相關故事可參考下篇文章。

在HTTP中,會用到的行為可分為兩種,上傳和下載(上傳泛指傳檔案、傳帳號密碼進行登入,下載泛指下載檔案、獲取文字資訊),而要分別這些行為的方法,在HTTP的定義中最主要的是“GET”和“POST”,兩者的差異,將在後面透過實例來講解。

URLSession的相關教學也可參考Ray的文章,講解得十分清楚。以下將依此架構圖來講解。

既然提到URLSession是主角,當然所有的連線都要實例化URLSession來進行操作。關於URLSession的細部設定,可以透過URLSessionConfiguration來設定Cache、Cookies、背景執行、無痕模式(資料不寫入disk)、執行的執行緒….等。

當然依照apple慣用的protocol設計模式,URLSession當然有URLSessionDelegate,用來處理些session相關的事務(ex: session不合格、登入相關、背景執行完畢)

有了URLsession後,可發出request給伺服器了,request中帶著我們要求的內容,例如URL、使用get或post、帶著何種參數…..等細部設定。夾帶著request出去的行為稱為task,也就是一項一項的任務。

可分為dataTask,downloadTask,uploadTask,同樣的這些task也有其delegate可進行設定。(URLSessionTaskDelegate, URLSessionDownloadDelegate, URLSessionDataDelegate)

以上提到的只是URLSession內的冰山一角,但已足以應付大部分的情況。若要更深入的研究,還請大家詳讀官方guideline。

在part2中將正式進入實作的部分,教導大家如何實作上傳下載等功能。

--

--