这是一个非常常见的问题,一次又一次地问堆栈溢出,我读了很多这方面的答案,但我仍然有点困惑。
我需要从iPhone sdk调用webservices。
以下是我的问题:
我不清楚SOAP或REST返回什么响应。有什么特定的,如果响应是XML,那么我们应该使用REST,如果JSON我们应该使用SOAP?
ASIHTTP与SOAP和REST的作用是什么?
如果我收到XML响应
<oproduct> <iid>113133791</iid> <icategoryid>270</icategoryid> <imerchantid>1547</imerchantid> <iadult>0</iadult> <sname>The Ashes / 1st Test - England v Australia - Day 1</sname> <sawdeeplink>http://www.acbcd.com/pclick.php?p=113133791&a=111402&m=1547&platform=cs</sawdeeplink> <sawthumburl>http://images.abcdd.com/thumb/1547/113133791.jpg</sawthumburl> <fprice>69.99</fprice> </oproduct>
我需要手动解析吗?或者我如何处理XML响应?
我收到了很多关于REST和SOAP的文章,但没有适当的代码来理解它。 如果对这些问题有任何帮助,我将不胜感激。
答案 0 :(得分:77)
SOAP - “简单对象访问协议”
SOAP是一种通过Internet传输消息或少量信息的方法。 SOAP消息采用XML格式化,通常使用HTTP(超文本传输协议)发送。
所以SOAP有一个标准消息必须发送的标准。
每个soap Web服务都可以使用WSDL(Web服务定义语言)定义,这是一种用于传输SOAP XML的模式。
有许多工具可用于将WSDL(您的Web服务定义)转换为本机代码。
可用于ObjC的工具之一是 Sudz-C(http://sudzc.com/),它将任何Web服务的WDSL转换为ObjC代码以访问Web服务。
休息 - 具有代表性的州转移
Rest是在客户端和服务器之间发送和接收数据的简单方法,它没有定义任何标准,您可以以JSON,XML甚至文本的形式发送和接收数据。与SOAP相比,它的重量轻。
要在iOS中处理Rest,有许多可用的工具,我建议使用 RestKit http://restkit.org/ 来处理XML和JSON。
我建议您使用Rest进行移动开发,因为它的重量轻
(简单的例子,人们纠正我,如果我错了)
答案 1 :(得分:5)
好的,所以你在这里有几个不同的问题:
REST是一种访问 Web服务的方式。 SOAP是访问Web服务的另一种方法。 REST使用查询字符串或URL格式,而SOAP使用XML。 JSON和XML是两种不同的发送数据的方式。 SOAP和XML通常相互关联。对于移动应用程序,REST / JSON通常是要走的路。更易于实施和维护,更多电报等。
正如比尔指出的那样,ASIHTTP是一个包装器。根据您的需要,还有其他选择可以做类似的事情。如果您正在使用REST / JSON,那么NSURLConnection
+ SBJSON
可能会成功,我个人喜欢它。
如果您的SOAP服务具有可用的WSDL,则可以使用wsdl2objc自动构建用于解析和提取的代码。如果它是JSON服务或者没有可用的WSDL,我建议使用SBJSON
并简单地按以下方式解析:
for(repsonse中的id jsonElement){ self.propertyA = [jsonElement valueForKey:@“keyA”]; self.propertyB = [jsonElement valueForKey:@“keyB”]; }
希望有所帮助!
答案 2 :(得分:1)
1)SOAP响应必须是XML,并返回其他格式,您需要将它们嵌入响应XML(低效)或使用SOAP附件(困难)。 SOAP响应包含在soap信封标记中,通常有一个关联的wsdl。如果您显示的XML就是您所获得的,那么它可能不是SOAP服务。我在XML中看到了链接,这是他们考虑到REST的一个好兆头。
2)我没有听说过ASIHTTP。一个快速的谷歌,它看起来像是一个包装iOS中的http接口的第三方库。看起来你会用它来帮助你发出http请求,虽然我建议它可能没有必要;您应该直接使用http库进行评估。
3)你需要以某种方式解析它。你可以手工完成,但这通常是一个非常糟糕的主意。 XML可以有多种形式,但仍具有相同的含义,如果您不支持所有表单,如果Web服务提供者开始以不同方式格式化XML,即使其语义相同,您的应用程序也可能会破坏。您将使用XML api来读取XML。 DOM api会将它读取为树形式,您可以使用XPath从树中提取信息。