2009-12-31 61 views
3

我開始使用iPhone應用程序開發,並希望創建一個涉及從Web應用程序中提取數據的應用程序。我將使用PHP和Zend Framework開發API。我從來沒有創建過公共API,也沒有一個iPhone公共數據的應用程序。最佳實踐:在爲iPhone應用程序創建Web應用程序API之前應該瞭解的內容?

這裏有我有一些具體的問題:

的事情之一,我需要做的是建立與來自API的數據表視圖。

  • 我的API應該返回什麼數據格式? XML,JSON,HTML? (我假設XML將是最簡單的)

比方說,我的API有fetchAll函數返回一個數據庫表中的所有記錄,我應該怎樣,所以很容易在工作格式化這個數據我iPhone應用程序?

# http://myapp.com/api/people/fetchAll 
array(
    0 => 'John', 
    1 => 'Sally', 
    2 => 'Chris' 
) 

更新:做一些研究,我決定,(在服務器端)之後,我想實現一個RESTful API返回JSON。所以我的iPhone應用程序最終將成爲一個REST客戶端。

我也發現了這個帖子,雖然它現在可能已經過時:Creating RESTful Web Service Clients in Cocoa and Cocoa Touch

回答

5

我會建議使用JSON。

在服務器上,您希望從「fetchAll」請求中以JSON格式返回數據。

在iPhone客戶端應用程序中,從請求 (嘗試ASIHTTPRequest library)獲取數據後,可以使用庫(如TouchJSON)解析JSON。

UPDATE

我還是推薦JSON,但我只是用NSURLConnection的使用API​​來溝通。實際上,我使用iOS Recipes書中的包裝,因爲它們提供了很好的塊回調,而不需要實現委託方法。

+0

絕對是JSON的第二選擇。目前,不同語言之間的數據交換格式不再受JSON支持。我已經用它在ObjC <-> Perl通信很長一段時間沒有障礙。另外,它很小巧,所以很便宜! – rpj 2009-12-31 20:33:08

+1

「目前,不同語言之間的數據交換格式目前不再受JSON支持。」我不同意。 XML受到更高度的支持。例如,iPhone上支持XML解析,但JSON需要第三方庫。 – Jay 2009-12-31 21:51:45

+1

真正的Jay,但仍然在iphone上使用JSON比使用Obj-c的XML更容易。 – 2010-01-01 18:33:54

1

查看Objective Resource project。它可以與rails一起使用,但可以與任何使用ActiveResource約定的站點一起使用。

我已經成功地將它用於幾個不同的項目。

JSON序列其期望的對象是這樣的:

{ "className" : { "key1" : "value1", "key2" : { "className2" : { "key1" : "value1" }}}} 

陣列,相信,與像在前的由方括號和逗號分隔包圍的多個條目是相同的。

+0

我檢出了ObjectiveResource。它看起來非常甜美!沒有關於它如何工作的文檔,或者它發送時數據的樣子,因爲我將使用PHP(Zend Framework)創建REST服務器,所以我不確定這是否適用於我。 – Andrew 2010-01-03 02:05:18

+0

我已經使用了ObjectiveResource,雖然這個想法很好,但實現並不好。最大的問題是缺少異步請求,這意味着先驗每個請求都會阻塞主線程,這是不可接受的恕我直言。我會避免它。 – 2010-01-03 21:26:46

+0

akosma:如果有一個選項可以用回調進行異步調用,那將會很不錯。我只在阻塞正確或至少可以接受的情況下使用它。我已經使用performSelector:withObject:afterDelay來進行網絡調用,並有一些微小的延遲,以允許活動指示器開始動畫。 – 2010-01-04 06:16:34

0

正如我在評論中提到的,我會去REST + JSON。然而,如果你想測試另一種方法,我已經在Github上發佈了一些代碼,它提供了可可的NSURL加載機制的封裝,這可能是有幫助的。

它最初的目的是加載格式化爲Apple屬性列表(plist)的XML數據,它們是Cocoa的本地序列化機制。有Ruby和Python庫可用於生成plist格式的XML(我想其中一些還會生成二進制plists,這對解析和反序列化來說更快)。

在第154行中,您可以看到如何將加載到NSData實例中的屬性列表轉換爲本機NSDictionary。

http://github.com/akosma/iphonerestwrapper/blob/master/Classes/Wrapper.m#L154

相關問題