JSON或SOAP(XML)?

我正在为公司开发一个新的应用程序。 应用程序必须从iPhone交换数据。

公司服务器端使用.NET框架。

例如:特定CustomerNumber的类“Customer”(姓名,地址等)应该先从服务器下载到iphone,存储在本地,然后再上传以应用更改(并使其可供其他人使用)。 并发不应该是一个问题(至less在这个时候…)

在任何情况下,我必须开发服务器端(Web服务或其他)和iPhone应用程序。

我可以自由地确定最好的方法(这是应用程序“第一”,所以它将成为未来的“标准”)。

那么,你build议我什么?

使用SOAP Web服务(XMLparsing等)或用户JSON? (它似乎更轻…)我清楚如何“上传”数据使用SOAP(很长的代码的XML SOAP信封…我会避免),但我怎么能使用JSON做同样的事情?

应用程序需要使用date值(例如:last_visit_date等..)在JSON呢?

JSON比XML有几个优点。 它的体积小得多,而且臃肿,所以你将通过networking传递更less的数据 – 在移动设备的情况下将会产生相当大的差异。

它也更容易在JavaScript代码中使用,因为您可以直接将数据包直接传递到JavaScript数组中,而无需进行任何parsing,提取和转换,因此它的CPU密集程度也更低。

要使用它进行编码,而不是XML库,您需要一个JSON库。 date的处理就像使用XML一样处理 – 将它们编码为标准,然后让库识别它们。 (例如, 这里是一个带有date样本的图书馆 )

这是一个入门书 。

啊,大问题: JSON还是XML

一般来说,只有当我需要传递大量文本时,我才更喜欢XML,因为XML擅长包装和标记文本。

当传递小数据对象时,只有小的string(ID,date等),我倾向于使用JSON,因为它更小,更容易parsing,更易读。

另外,请注意,即使您selectXML,这也不意味着您需要使用SOAP。 SOAP是一个非常重的协议,旨在为合作伙伴之间的互操作性而devise。 当你在这里控制客户端和服务器时,这不一定是合理的。

考虑如何在iPhone上消费结果。 你会用什么机制来阅读Web服务响应? 的NSXMLParser?

你如何使用数据会对你的服务有最大的影响。

JSON和SOAP是你唯一的select吗? 那么RESTful服务呢?

看看networking上有些大公司可以通过iPhone客户端访问的公共API:

Twitter API FriendFeed API

另外,请查看以下相关文章:

  • 如何在iPhone上parsing嵌套的JSON
  • 仍然可以使用SOAP的RESTful WCF服务
  • REST vs SOAP的性能

JSON具有以下优点:

  1. 它可以编码布尔值和数值…在XML中,一切都是一个string
  2. 它有更清晰的语义…在json中,您有{"key":"someValue"} ,在XML中,您可以有<data><key>someValue</key></data><data key="someValue" /> …任何XML节点都必须有一个名字…这并不总是有意义的……而且孩子们可以表示一个对象的属性,或者是一个孩子,当多次出现时它们实际上代表一个数组…真正了解XML消息的对象结构,您需要其相应的模式…在JSON中,您只需要JSON …
  3. 较小,因此在parsing/生成期间使用更less的带宽和内存。

除此之外,我没有看到XML和JSON之间的区别…我的意思是,这是可以互换的…你可以使用JSON来捕获SOAP的语义,如果你想…这只是SOAP是如此臃肿…如果你想使用SOAP,使用一个库和生成器…这是既没有趣味,也没有兴趣,所有手工构build…

使用XML RPC或JSON RPC应该可以更快速地工作……它更轻量级,而且您可以随意使用JSON或XML ……但是在创build客户端< – >服务器应用程序时,我认为非常重要的一点是抽象双方的传输层…您的整个业务逻辑等都不应该仅仅依赖于一个小界面,当涉及到通信,然后您可以根据需要插入协议到您的应用程序…

你也可以在iPhone端使用HessianKit HessianKit,在服务器端使用HessianC#。

最大的好处是:1.二进制序列化协议中的Hessian,所以更小的数据有效载荷,适用于3G和GSM。 2.你不需要担心格式在任何一端,传输是自动的代理。

所以在服务器端,你只需定义一个C#接口,比如:

 public interface IFruitService { int FruitCount(); string GetFruit(int index); } 

然后你只需inheritanceCHessianHandler类并实现IFruitService,然后你的web服务就完成了。

在iPhone上只需编写相应的Objective-C协议:

 @protocol IFruitService -(int)FruitCount; -(NSString*)GetFruit:(int)index; @end 

这可以通过代理访问一行代码:

 id<IFruitService> fruitService = [CWHessianConnection proxyWithURL:serviceURL protocol:@protocol(IFruitService)]; 

链接:

HessianKit: hessiankit

有比SOAP和JSON更多的选项。 您可以使用XML来执行基于REST的协议( Representational State Transfer )。 我认为它比SOAP更容易使用,而且您可以获得更好的XSD(您devise的)。几乎所有客户端都可以轻松访问这些服务。

另一方面,几乎所有的语言都可以使用JSONparsing器,如果您通过AJAX使用JSONparsing器,则可以使用JavaScript进行调用。

但是,SOAP可以相当强大,拥有大量支持企业function的标准化扩展。

正如其他人已经注意到的那样,我肯定会使用JSON–速度更快,数据量更小。 您还可以使用数据build模框架(如JSONModel)来validationJSON结构,并将JSON对象自动转换为Obj-C对象。

JSONModel还包括用于联网和使用API​​的类 – 还包括json rpc方法。

看看这些链接:

使用JSONModel的简短示例: http : //www.touch-code-magazine.com/how-to-make-a-youtube-app-using-mgbox-and-jsonmodel/

希望这些是有用的