25

嗨,我曾与 JAX-WS 合作过基于 SOAP 的 Web 服务。现在我想使用 REST,因为 REST 比 SOAP 具有优势,正如我从这里研究的那样。

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

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

提前致谢。

4

1 回答 1

37

TL;博士

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 的 Web 应用程序并与 RESTful 服务器进行对话时数据。

于 2015-02-09T07:43:31.197 回答