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


To SOAP or not to SOAP? What is best for my webservice?

我需要创建一个web服务,将XML数据返回给我的一些客户端
每当我在谷歌上搜索web服务教程时,80%的人都在谈论使用SOAP。

我的问题是:任何客户端都能将提取的数据作为普通的XML读取吗
SOAP有替代方案吗?

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

REST是一种体系结构风格,因此它在实现方式方面很灵活。该体系结构只是一个指南,如果应用程序符合RESTWeb服务的定义特征,则将其视为RESTful。

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

有关更多详细信息,请参阅维基百科上关于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) {
    }
});

我认为这在很大程度上取决于您的需求。

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

  • JSON非常适合在JavaScript应用程序中使用。然而,大多数编程语言本机支持JSON;其中包括流行的语言,如PHP或自Flash 10.2以来的Actionscript 3。

XML生活在定义良好(并且广泛传播)的其他标准的丰富生态圈中。其中:

  • XSD,一个模式定义,您可以在其中定义信息的结构以及客户端期望它们的结构。这些可以附带名称空间。许多编程语言(如Java)或Framework(如.NET)都可以基于这种模式自动生成类和对象。

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

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

正如jmort253已经说过的,REST是另一种方法:您没有那么多的标准和限制,因此在实现中非常自由。

长话短说:我建议对必须作为数据传输的复杂信息使用SOAP,对非复杂数据使用REST,这些数据主要可以被视为没有许多维度的键=>值对。

SOAP的一个很好的例子是adidasmiCoach API,它必须处理大量的训练数据,并且必须处理大量训练结果。

另一方面,Twitter主要处理键=>值信息(如标签=>消息),非常适合REST API。