什么是提供SOAP / XML + REST / JSON的最佳方式?

时间:2010-06-22 00:38:56

标签: java xml json rest soap

我正在创建一个通用的Web服务,可能有许多不同的客户端,其中一些我目前无法预料。

我已经拥有一个不错的Java Services API,并希望在此基础上提供Web服务外观。

SOAP和REST争论的双方都有很多争论,让我想知道是否有一种简单的方法可以提供这两种方式?不一定同时进行相同的部署(虽然这可能很好)......而是为客户提供选择。

5 个答案:

答案 0 :(得分:3)

是的,你可以同时提供(我建议你这样做)。您可以根据HTTP Accept标头(application/soap+xmlapplication/json)或自定义查询参数(例如http://example.com/myapi?fmt=soap - 来决定响应应采用的格式与http://example.com/myapi?fmt=json)。在任何情况下,如果客户端未明确指定所需的响应格式,则需要具有明确的默认回退值。

您也可以考虑添加REST / POX响应格式,并将Atom +可选扩展作为响应容器。 (application/atom+xmlhttp://example.com/myapi?fmt=atom用于上述两种方法)

答案 1 :(得分:3)

不,没有。 SOAP和REST是这样的不同架构,任何支持两者兼容的框架都可能在其中一个框架上做得不好。

虽然很容易为WSDL文件,SOAP端点等获取一组函数或方法,因为函数和SOAP都基本相同,没有对发生的事情进行约束。调用者使用许多参数设置一个函数调用,触发它并(通常)等待响应或异常。

为每个方法创建HTTP端点是有些人认为足以构建RESTful端点的,但事实并非如此。但是,制作这样的HTTP端点对您来说仍然有意义,在这种情况下,您应该继续寻找提供此功能的框架。

我的答案以“不,没有”开头的原因是因为为了制作REST接口,发布HTTP端点是不够的,你还需要做更多的工作:

  • 查找要重复使用的媒体类型
  • 找到要重用的链接关系
  • 设计自己的媒体类型
  • 定义您自己的链接关系

世界上没有任何框架会采用任意的功能签名列表,并为您做这四件事。框架允许您利用比SOAP更多的HTTP(例如OAuth,OpenID,缓存,幂等),但它们不会一直带您到REST。

答案 2 :(得分:2)

简而言之,单个WCF服务可以为同一服务合同提供多个端点。一个可以是REST,一个可以是SOAP / XML,一个可以是TCP / IP +二进制。

答案 3 :(得分:1)

我并不热衷于肥皂网服务,但谷歌搜索我发现apache的Axis 2框架不仅提供SOAP 1.1和SOAP 1.2,还提供具有相同业务逻辑实现的REST / POX。你可以看到更多信息:

http://ws.apache.org/axis2/

答案 4 :(得分:-1)

我坚持使用简单的REST解决方案。 Amazon为相同的服务提供REST和SOAP apis,并且85%的时间都使用REST服务,因此如果您没有特定的SOAP需求,那么我就不会实现它。