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具有以下优点:
- 它可以编码布尔值和数值…在XML中,一切都是一个string
- 它有更清晰的语义…在json中,您有
{"key":"someValue"}
,在XML中,您可以有<data><key>someValue</key></data>
或<data key="someValue" />
…任何XML节点都必须有一个名字…这并不总是有意义的……而且孩子们可以表示一个对象的属性,或者是一个孩子,当多次出现时它们实际上代表一个数组…真正了解XML消息的对象结构,您需要其相应的模式…在JSON中,您只需要JSON … - 较小,因此在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方法。
看看这些链接:
- http://www.jsonmodel.com – JSONModel框架
- http://json-rpc.org – JSON API实现的规范
- http://www.charlesproxy.com – debuggingJSON API的最佳工具
- http://json-schema.org – 为JSON定义validation模式的工具,在这个过程中很有用
使用JSONModel的简短示例: http : //www.touch-code-magazine.com/how-to-make-a-youtube-app-using-mgbox-and-jsonmodel/
希望这些是有用的