SOAP还是不SOAP?什么对我的网络服务最好?

时间:2012-04-07 08:27:05

标签: php web-services soap

我需要创建一个Web服务,将XML数据返回给我的一些客户 对于网络googleservice tutorials的任何地方,80%谈论使用SOAP

我的问题是:任何客户端都可以将获取的数据作为普通XML读取吗? 是否有SOAP的替代品?

2 个答案:

答案 0 :(得分:6)

REST是SOAP的轻量级替代品。它使用现有的HTTP方法,如GET,POST,PUT,DELETE。从概念上讲,URL标识服务器上的资源,HTTP方法定义要执行的操作。

REST是一种架构风格,因此它在实现方式方面具有灵活性。该体系结构只是一个指南,如果应用程序满足REST Web服务的已定义特性,则该应用程序被视为RESTful。

JSON通常用作传输,而不是XML。优点是JavaScript可以立即解析JSON,许多服务器端技术都有用于将JSON反序列化为对象的库。虽然建议使用JSON,但您可以将任何内容类型与REST结合使用,包括XML。

有关详细信息,请参阅Wikipedia article on REST

<强>示例:

获得福特雷鸟的汽车课程

HTTP GET http://example.com/cars/ford/thunderbird/8NUY1234  

$.ajax({
    url: '/cars/ford/thunderbird/8NUY1234',
    type: "GET",  /* implicit default, listed for clarity only */
    success: function(data) {
        alert(JSON.stringify(data) );  /* output json
        alert("engine = " + data.engine);
    }
});

将车辆插入集合

HTTP POST http://example.com/cars/ford/f150/?vin=F14564564564&color=blue&engine=I6&...

// insert record on server.
var dataString = "vin=F143567547&color=blue&engine=I6"
$.ajax({ 
    url: '/cars/ford/f150',
    data: dataString,
    type: "POST",
    success: function(data) {
    }
});

答案 1 :(得分:2)

我说这在很大程度上取决于你的要求。

  • JSON是轻量级的,因为它没有像XML那样多的开销。如果你有很多短的键值部分,那么在XML中传输的字节数最多的是标记和属性定义,而不是信息数据本身。

  • JSON非常适合在JavaScript应用程序中使用。但是,大多数编程语言本身都支持JSON;其中,流行的语言,如PHP或 - 自Flash 10.2 - Actionscript 3。

XML生活在一个定义明确(且广泛传播)的其他标准的丰富生态圈中。其中:

  • XSD,一种架构定义,您可以在其中定义信息的结构以及客户对其的期望。这些可以伴随命名空间。许多编程语言(例如Java)或Frameworks(例如.NET)可以基于此模式自动生成类和对象。

  • XSL(T)是一种转换语言,它可以将您的XML转换为可以自动适合您的客户的文档格式(例如,针对其网站不同部分的不同HTML代码段)。

SOAP充分利用了这些标准,因为它提供了有关客户如何使用服务的方案和明确定义的合同。许多语言(其中包括PHP,Java)和许多框架(其中包括.NET和Zend Framework)可以自动检测服务提供哪些接口并自动生成面向对象的接口,而无需客户端解释SOAP协议 - 它就是这样明确定义它可以自动完成。一些框架(例如Zend,.NET)甚至可以在您定义类之后为您自动生成SOAP服务 - 这要归功于一个非常明确的标准。

正如jmort253已经说过的那样,REST是另一种方法:你没有那么多的标准和限制,因此你的实现是免费的。

总而言之:我建议将SOAP用于复杂信息,这些信息必须作为数据传输,REST用于非复杂数据,主要可以看作是key =&gt;价值对没有多少维度。

SOAP的一个很好的例子是adidas miCoach API,它必须处理大量的锻炼数据,并且必须处理大量的锻炼结果。

另一方面,Twitter主要处理key =&gt;值信息(例如tags =&gt;消息)并且完全适合REST API。