JAX-WS与JAX-RS对于RESTful Web服务

时间:2012-09-26 10:15:47

标签: java rest soap jax-ws jax-rs

您好我使用JAX-WS进行基于SOAP的Web服务。现在我想使用REST,因为REST比我从here研究的那样优于SOAP。

但是从不同的文章我知道我们也可以从JAX-WS创建RESTful Web服务。但大多数人都说我们应该使用JAX-RS而不是JAX-WS。

我的问题是JAX-WS RESTful webservice和JAX-RS(jersey)之间有什么区别。 JAX-RS优于JAX-WS有什么优势?为什么我们应该将JAX-RS用于RESTful Web服务?

先谢谢。

1 个答案:

答案 0 :(得分:33)

TL; DR

JAX-WS适用于基于XML的Web服务,例如SOAP。 JAX-RS没有相同的限制。

JAX-WS通常面向服务器到服务器与明确定义的合同(WSDL)的交互,通常当服务和客户端来自不同的组时。它是非常耗费资源的,因此对于网络或客户端设备功能不够理想的客户端到服务器交互是不可行的。

JAX-RS适用于客户端到服务器的交互,尽管服务器到服务器是可以的。由于它几乎没有服务义务,因此可以根据客户的需求进行调整。

更多信息

JAX-RS API仅提供代码优先方法,而JAX-WS允许使用WSDL文件(通常不建议)代码优先(通常不推荐)和契约优先(更常见的推荐)。

JAX-RS 2.0引入了客户端API,它是HttpUrlConnection的智能包装器,具有更多的映射功能,JAX-WS也是一个包装器,但它在参考实现中处理的数据只是XML。

JAX-RS的优势在于可以创建更简单的API,以便在不同的浏览器和移动设备中创建和消化消息,即JSON结构。它没有引入信封的概念并使用HTTP。它不引入加密或安全性,它使用HTTPS。

JAX-WS虽然它在HTTPS上运行以进行加密,但使用WS-SecurityPolicy等为安全性提供了附加功能。此外,使用WSDL可以稳固地建立合同,并且可以使用ESB(如DataPower)在应用程序外部进行验证。

那么选择什么

JAX-WS通常面向服务器到服务器与明确定义的合同(WSDL)的交互,通常当服务和客户端来自不同的组时。它是非常耗费资源的,因此对于网络或客户端设备功能不够理想的客户端到服务器交互是不可行的。

JAX-RS适用于客户端到服务器的交互,尽管服务器到服务器是可以的。客户端和服务器之间唯一的合同义务是消息和请求标头。由于它几乎没有服务义务,因此可以根据客户的需求进行调整。

然而,使用RESTful服务API类似于执行像Ruby和Python这样的元编程,这会将问题延迟到运行时,因为双方都没有商定和技术上强制执行的定义模式。因此我不建议在任何地方使用RESTful服务,但如果我控制了双方通常会在构建使用静态HTML / CSS / JS并与RESTful服务器进行协商的Web应用程序时发生这种情况,我会推荐它。数据