最佳实践:在为iPhone应用程序创建Web应用程序API之前我应该​​了解什么?

时间:2009-12-31 19:11:18

标签: iphone api zend-framework web-applications

我开始使用iPhone应用程序开发,并希望创建一个涉及从Web应用程序中提取数据的应用程序。我将使用PHP和Zend Framework开发API。我之前从未创建过公共API,也没有使用适用于公共数据的iPhone应用程序。

以下是我的一些具体问题:

我需要做的一件事是使用来自API的数据创建一个表视图。

  • 我的API应该返回什么数据格式? XML,JSON,HTML? (我假设XML将是最简单的)

假设我的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

3 个答案:

答案 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