Pages

Monday, April 4, 2011

iPhone app 與 Web service 的溝通良好關鍵在 API 設計

API
我們在使用 iPhone app 如果不是單一在手機上操作,任何像是 Facebook, Twitter, Foursquare 等等結合,讓使用者可以透過 iPhone app 從 Anywhere, Anytime 都可以操作服務,當回到電腦前打開瀏覽器也可以看到剛剛的資料,這樣的概念已經在我們現在 Web 3.0  (Social, Content, Mobile) 文化很常見了。而 iPhone app 在跟 Server 這邊透過網路帶出豐富的資料,以及透過手機輕巧隨時可以輸入的特性傳回資料給 Server 上,這樣的合作模式是需要良好的溝通默契的,一切都建築在 API 的良好設計上。


API (Application programming interface) 是一個特定的規則讓軟體開發雙方可以存取使用些服務,只要透過 API 溝通,Server side 可以選擇任何語言開發,而我們 iPhone app 則可以用 Objective-C 搭配 API 溝通的 Library 來連接。而在像是 Web development 上,API 是定義 Hypertext Transfer Protocol (HTTP) request 訊息,包含傳輸的內容,而內容格式通常會使用 Extensible Markup Language (XML) 或者 JavaScript Object Notation (JSON) 格式。而當這樣的形式來規劃平台即可做出 web service。


所以要設計出整個合作服務,我們需要的要件有:
  • API 文件。此來描述 API 長相,會有哪些開放的 Request URL,會需要傳送哪些 parameter 當作條件,會回傳哪些資料,內容的 key value 的長相。
  • API 內容格式。是採用 XML 還是 JSON,內容會是長怎麼樣子,這些影響到 iPhone app 解析上所需採用的相關 Library。
  • API Key。申請 API key 可以讓 Server 在處理網路外在呼叫進來所代表的身分,是來自登記哪一方的。這樣可以作為是否合法登記與授權過的信任來源。身為 Client 的 iPhone app 要當個好的公民,呼叫 API 也要呼叫的有禮,夠用的 Request 即可,不要造成自己網路負擔之外,也造成 Server 端的負擔。Server 端設計上也可以去紀錄哪些 request 是由哪些登記的 API_KEY 進來的,這樣在查不好的存取時,可以做出追蹤與查明原因。
  • 登入機制。每一家的 Web service 提供的登入機制都不同,身為開發 client 端的 iPhone app 要瞭解,這樣才能進行登入後後續的 API 操作。


在 iPhone app project 的設計規劃:
  • 如果今日 Web service 的 API 已經訂好,那麼我們在開發上 Data object 設計盡量以 Web service 回傳的內容格式的 key 為主,這樣開發上比較不會造成 naming 的誤解。所以我們在開發網路 Request 那邊程式僅需做好溝通與將內容資料轉換,塞進我們的 NSObject 讓 iPhone app 其他的程式 layer 使用即可。
  • 我們在 View Controller 或者是 Data source 的相關程式就可以依照我們自己來設計,專注做出自己想要的形式。
所以根據以上規劃,我們的 iPhone project 各個 layer 即可做出好的角色分工,以 MVC 的架構來說,Model 的部份做好 HTTP request, 資料轉換, 資料塞進 Objects 。而 View, Control 不需要知道 API 不要去管資料轉換問題,而是要以我們 Mobile 優勢做出好的使用者體驗。程式在開發上也會比較好維護與可讀性才會比較高。


一份良好的 API 設計,可以讓我們 iPhone app 在操作上行雲如流水,資料接的天衣無縫,讓 iPhone app 操作起來非常愉悅之於,資料也會很豐富的呈現在使用者眼前。

3 comments:

  1. Dear Edward
    能否請教在使用者同意提供資料後
    iOS要持續和web service持續傳送/接收資料
    你是利用web service或socket的方式呢?

    謝謝

    ReplyDelete
  2. Dear 李先生,

    建議採用 Web service 的 RESTful 方式,這方面在實作上搭配 http 的 methods (GET/POST) 等,伴隨各種 url 加上參數,即可取得資料和傳遞資料了。

    Edward

    ReplyDelete
  3. Dear Edward
    thank you,
    我這程式有點像每10秒上傳一次資料
    剛剛去下載asihttprequest api來用用看

    謝謝你

    ReplyDelete