2009-12-31 33 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

相关问题