java - 用于 RESTful Web 服务的 JAX-WS 与 JAX-RS

标签 java rest soap jax-ws jax-rs

您好,我曾使用 JAX-WS 开发基于 SOAP 的 Web 服务。现在我想使用 REST,因为正如我从 here 开始研究的那样,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 服务?

提前致谢。

最佳答案

TL;DR

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

JAX-WS 通常适用于通过明确定义的契约(Contract) (WSDL) 进行服务器到服务器的交互,并且通常当服务和客户端来自不同的组时。这是非常耗费资源的,因此对于网络或客户端设备功能不是最佳的客户端到服务器交互来说是不可行的。

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

更多信息

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

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

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

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

那么选择什么

JAX-WS 通常适用于通过明确定义的契约(Contract) (WSDL) 进行服务器到服务器的交互,并且通常当服务和客户端来自不同的组时。这是非常耗费资源的,因此对于网络或客户端设备功能不是最佳的客户端到服务器交互来说是不可行的。

JAX-RS 面向客户端到服务器的交互,尽管服务器到服务器是可以的。客户端和服务器之间唯一的契约(Contract)义务是消息和请求 header 。由于它几乎没有服务义务,因此可以根据客户的需求进行调整。

但是,使用 RESTful 服务 API 类似于进行 Ruby 和 Python 之类的元编程,这会将问题延迟到运行时,因为双方没有达成一致并在技术上强制执行的定义模式。因此,我不推荐任何地方的 RESTful 服务,但如果我可以控制这两个方面,我会推荐它,这通常发生在您构建使用静态 HTML/CSS/JS 的 Web 应用程序并与 RESTful 服务器进行对话时数据。

关于java - 用于 RESTful Web 服务的 JAX-WS 与 JAX-RS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12599459/

相关文章:

java - 使用 Java Rally Rest API 创建特定于用户故事的缺陷/任务

jquery - Aurelia 与 jquery.soap。如何导入和使用该模块

java - Swagger 2 如何仅从请求示例中排除属性

java - 基于表单的登录同时应用 REST 原则

java - Axis2 系统无法推断传输信息错误

asp.net - 通过 SOAP 使用 Web 服务时为 "Access is Denied"

java - ComboBox 奇怪的行为 (JavaFX 8)

java - 在 while 循环中正确使用 BufferedReader.readLine()

java - 为什么向 User-B 注册的数据包监听器不起作用?

java - HttpURLConnection 类的 setDoOutput 和 setDoInput 方法有什么用