我正在开始 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 可可和可可触感
我建议使用 JSON。
在服务器上,您可能希望从“fetchAll”请求中返回 JSON 格式的数据。
在iPhone客户端应用程序上,从请求中获取数据后 (尝试使用ASIHTTPRequest库),您可以使用诸如TouchJSON之类的库来解析JSON。
更新
我仍然推荐 JSON,但我只是使用 NSURLConnection 与 API 进行通信。实际上,我使用 iOS Recipes 书中的包装器,因为它们提供了很好的块回调,而不需要实现委托方法。
查看目标资源项目。它可以与 Rails 一起开箱即用,但也可以与使用 ActiveResource 约定的任何站点一起使用。
我已经在几个不同的项目中成功使用了它。
它期望对象的 JSON 序列化是这样的:
{ "className" : { "key1" : "value1", "key2" : { "className2" : { "key1" : "value1" }}}}
我认为,数组与前面的多个条目相同,由方括号和逗号分隔。
正如我在评论中提到的,我会使用 REST + JSON。但是,如果您想测试另一种方法,我在 Github 中发布了一些代码,它提供了 Cocoa 的 NSURL 加载机制的包装器,这可能会有所帮助。
它最初的目的是加载格式化为 Apple 属性列表(plist)的 XML 数据,这是 Cocoa 的本机序列化机制。有 Ruby 和 Python 库可用于生成 plist 格式的 XML(我想其中一些库还生成二进制 plist,这样解析和反序列化速度更快)。
在第 154 行,您可以看到加载到 NSData 实例中的属性列表如何转换为原生 NSDictionary。
http://github.com/akosma/iphonerestwrapper/blob/master/Classes/Wrapper.m#L154