我开始使用iPhone应用程序开发,并希望创建一个涉及从Web应用程序中提取数据的应用程序。我将使用PHP和Zend Framework开发API。我之前从未创建过公共API,也没有使用适用于公共数据的iPhone应用程序。
以下是我的一些具体问题:
我需要做的一件事是使用来自API的数据创建一个表视图。
假设我的API有一个fetchAll
函数,它返回数据库表中的所有记录,我应该如何格式化这些数据,以便在我的iPhone应用程序中轻松使用?
# http://myapp.com/api/people/fetchAll
array(
0 => 'John',
1 => 'Sally',
2 => 'Chris'
)
更新在做了一些研究后,我决定(在服务器端)我想实现一个返回JSON的RESTful API。所以我的iPhone应用程序最终将成为一个REST客户端。
我也发现了这篇文章,虽然它现在可能已经过时了:Creating RESTful Web Service Clients in Cocoa and Cocoa Touch
答案 0 :(得分:5)
我建议使用JSON。
在服务器上,您希望从“fetchAll”请求中以JSON格式返回数据。
在iPhone客户端应用程序中,从请求中获取数据后 (尝试ASIHTTPRequest library),您可以使用TouchJSON等库来解析JSON。
<强>更新强>
我仍然推荐JSON,但我只是使用NSURLConnection与API进行通信。实际上,我使用iOS Recipes书中的包装器,因为它们提供了很好的块回调,而不需要实现委托方法。
答案 1 :(得分:1)
查看Objective Resource project。它开箱即用,但可以使用任何使用ActiveResource约定的站点。
我已经成功地使用了几个不同的项目。
它期望对象的JSON序列化是这样的:
{ "className" : { "key1" : "value1", "key2" : { "className2" : { "key1" : "value1" }}}}
我认为,数组与前面用方括号和逗号分隔的前面的多个条目相同。
答案 2 :(得分:0)
正如我在评论中提到的,我会去REST + JSON。但是,如果你想测试另一种方法,我在Github上发布了一些代码,它提供了一个围绕Cocoa的NSURL加载机制的包装器,这可能会有所帮助。
最初打算加载格式化为Apple属性列表(plists)的XML数据,这些是Cocoa的本机序列化机制。有一些Ruby和Python库可用于以plist格式生成XML(我想其中一些也会生成二进制plist,它们可以更快地解析和反序列化)。
在第154行中,您可以看到加载到NSData实例中的属性列表如何转换为本机NSDictionary。
http://github.com/akosma/iphonerestwrapper/blob/master/Classes/Wrapper.m#L154