SOAP和REST如何使用XML / JSON响应?

时间:2011-12-22 05:39:09

标签: iphone xml rest soap asihttprequest

这是一个非常常见的问题,一次又一次地问堆栈溢出,我读了很多这方面的答案,但我仍然有点困惑。

我需要从iPhone sdk调用webservices。

以下是我的问题:

  1. 我不清楚SOAP或REST返回什么响应。有什么特定的,如果响应是XML,那么我们应该使用REST,如果JSON我们应该使用SOAP?

  2. ASIHTTP与SOAP和REST的作用是什么?

  3. 如果我收到XML响应

  4. <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&amp;a=111402&amp;m=1547&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.abcdd.com/thumb/1547/113133791.jpg</sawthumburl>
        <fprice>69.99</fprice>
      </oproduct>
    

    我需要手动解析吗?或者我如何处理XML响应?

    我收到了很多关于REST和SOAP的文章,但没有适当的代码来理解它。 如果对这些问题有任何帮助,我将不胜感激。

3 个答案:

答案 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进行移动开发,因为它的重量轻SOAP vs REST

(简单的例子,人们纠正我,如果我错了)

答案 1 :(得分:5)

好的,所以你在这里有几个不同的问题:

  1. REST是一种访问 Web服务的方式。 SOAP是访问Web服务的另一种方法。 REST使用查询字符串或URL格式,而SOAP使用XML。 JSON和XML是两种不同的发送数据的方式。 SOAP和XML通常相互关联。对于移动应用程序,REST / JSON通常是要走的路。更易于实施和维护,更多电报等。

  2. 正如比尔指出的那样,ASIHTTP是一个包装器。根据您的需要,还有其他选择可以做类似的事情。如果您正在使用REST / JSON,那么NSURLConnection + SBJSON可能会成功,我个人喜欢它。

  3. 如果您的SOAP服务具有可用的WSDL,则可以使用wsdl2objc自动构建用于解析和提取的代码。如果它是JSON服务或者没有可用的WSDL,我建议使用SBJSON并简单地按以下方式解析:

    for(repsonse中的id jsonElement){         self.propertyA = [jsonElement valueForKey:@“keyA”];         self.propertyB = [jsonElement valueForKey:@“keyB”]; }

  4. 希望有所帮助!

答案 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从树中提取信息。