我需要创建一个将 XML 数据返回给我的一些客户的 Web 服务。
无论我在哪里搜索网络服务教程,80% 的人都在谈论使用SOAP。
我的问题是这样的:任何客户端都可以将获取的数据作为普通 XML 读取吗?
有 SOAP 的替代品吗?
REST 是 SOAP 的轻量级替代方案。它使用现有的 HTTP 方法,如 GET、POST、PUT、DELETE。从概念上讲,URL 标识服务器上的资源,HTTP 方法定义要执行的操作。
REST 是一种架构风格,因此它在实现方式方面非常灵活。该体系结构只是一个指南,如果应用程序满足 REST Web 服务的定义特征,则该应用程序被视为 RESTful。
JSON 通常用作传输,而不是 XML。优点是 JavaScript 可以立即解析 JSON,并且许多服务器端技术都有用于将 JSON 反序列化为对象的库。虽然建议使用 JSON,但您可以将任何内容类型用于 REST,包括 XML。
有关更多详细信息,请参阅有关 REST 的 Wikipedia 文章。
例子:
获得福特雷鸟的汽车课程
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)或框架(如 .NET)可以基于此模式自动生成类和对象。
XSL(T) 是一种转换语言,它可以将给定的 XML 转换为可以自动适合您的客户的文档格式(例如,针对他们网站的不同部分的不同 HTML 片段)。
SOAP 充分利用了这些标准,因为它提供了关于客户端如何使用您的服务的方案和明确定义的合同。许多语言(包括 PHP、Java)和许多框架(包括 .NET 和 Zend Framework)可以自动检测服务提供哪些接口并自动生成面向对象的接口,而无需客户端解释 SOAP 协议 - 就是这样明确定义它可以自动完成。一旦定义了类,一些框架(例如 Zend、.NET)甚至可以为您自动生成 SOAP 服务——这要归功于定义非常明确的标准。
正如 jmort253 已经说过的,REST 是另一种方法:您没有那么多标准和限制,因此在您的实现中非常自由。
长话短说:我建议将 SOAP 用于必须作为数据传输的复杂信息,将 REST 用于非复杂数据,主要可以看作是键 => 值对,没有很多维度。
SOAP 的一个很好的例子是 adidas miCoach API,它必须处理大量的锻炼数据和大量的锻炼结果。
另一方面,Twitter 主要处理 key => value 信息(例如标签 => 消息)并且非常适合 REST API。