練習:將 Web Service API 包裝成 SDK Part 2
練習範圍
- Delegate
練習目標
一個 Web Serive SDK 大概可以分成兩種模式,一種是這個 library 發送出去的連線本身不會互相干擾,另外一種則是會互相取消。
比方說,我們現在在 UI上有一個搜尋功能,用戶打了一個關鍵字之後,前一個搜尋結果還沒有回傳,用戶又打了一個關鍵字,這個時候我們就必須先把前一個已經發送出去的連線取消掉。原因是:我們並不能夠保證每個連線的時間都是一樣的,如果第一個連線花了更多的時間才抓回資料,第二個連線都結束了一陣子之後,第一個連線才回來,那麼,最後用戶看到的是第一個連線的結果,而這並不符合用戶的期待。
我們現在要寫的就是一套會互相取消連線的 SDK。
練習內容
httpbin.org 是一個讓人練習 HTTP 連線的沙箱,我們要練習寫一個 httpbin.org 的 Web Service SDK。這個服務有很多 API endpoint,會回傳 JSON、HTML 或圖片格式的資料,我們要使用以下這些 API:
包裝成像是以下的 method
- (void)fetchGetResponse;
- (void)postCustomerName:(NSString *)name;
- (void)fetchImageWithCallback;
我們的連線物件只有一個單一的 delegate,當這些 method 的連線完成之後,都會將資料透過一個我們設計好的 protocol 傳給 delegate 物件。在呼叫這些 method 的時候,如果發現有任何還在進行中的連線,都要先取消原本的連線,才發送新的連線。
這個練習一樣要寫單元測試。