91

最近,我决定开始学习java web services,当我开始在google上搜索java web-services的教程时,我发现webservices有很多种类型,基于XML,基于SOAP,还有RESTful webservices。

此外,我发现有一个用于基于 xml 的 Web 服务的 JAX-WS 规范,以及用于创建 RESTful Web 服务的 JAX-RS 规范。

Q1)我很困惑,如果有人能帮助我理解这些不同类型的 web 服务之间的区别,那就太好了,这样我就可以决定先学习哪一个。

Q2) 另外,我想深入学习如何在 Java 中创建不同类型的 Web 服务。是否有任何教程或资源可以深入了解每种 Web 服务以及它们之间的比较。

Q3) 基于什么场景和条件,我应该决定创建基于 XML 的 Web 服务而不是 SOAP 服务,或者我应该使用 RESTful 服务。

4

4 回答 4

142
  1. SOAP Web 服务是基于标准的,并且几乎受到所有软件平台的支持:它们严重依赖 XML,并且支持事务、安全、异步消息和许多其他问题。这是一个相当大而复杂的标准,但几乎涵盖了所有消息传递情况。另一方面,RESTful 服务依赖 HTTP 协议和动词(GET、POST、PUT、DELETE)来交换任何格式的消息,最好是 JSON 和 XML。这是一种非常简单而优雅的架构方法。
  2. 与 Java 世界中的每个主题一样,有几个库可以构建/使用 Web 服务。在 SOAP 方面,您有JAX-WS 标准Apache Axis,在 REST 中,您可以使用RestletsSpring REST 设施以及其他库。

对于问题 3,本文指出 RESTful 服务适用于以下场景:

  • 如果您的带宽有限
  • 如果您的操作是无状态的:从一次调用到下一次调用不会保留任何信息,并且每个请求都被独立处理。
  • 如果您的客户需要缓存。

虽然 SOAP 在以下情况下是要走的路:

  • 如果您需要异步处理
  • 如果您需要正式的合同/接口
  • 在您的服务中,操作是有状态的:例如,您在请求中存储信息/数据并在下一个请求中使用存储的数据。
于 2012-05-11T20:15:24.463 回答
13

Q1)这里有几件事要阅读或谷歌更多:

java http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest中 SOAP 和 RESTful Web 服务的主要区别

你想先学什么取决于你。我建议您看一下CXF框架。您可以同时构建 rest/soap 服务。

Q2)这里有几个很好的肥皂教程(我把它们加了书签):

http://united-coders.com/phillip-steffensen/developing-a-simple-soap-webservice-using-spring-301-and-apache-cxf-226

http://www.benmccann.com/blog/web-services-tutorial-with-apache-cxf/

http://www.mastertheboss.com/web-interfaces/337-apache-cxf-interceptors.html

最好的学习方式不仅仅是阅读教程。但是你首先要通过教程来获得一个基本的想法,这样你就可以看到你能够(或不能)产生一些东西,这会让你有动力。

SO 是学习特定技术(或更多)的好方法,人们会问很多奇怪的问题,而且会有更奇怪的答案。但总的来说,您将了解以其他方式解决问题的方法。或许你不知道,或许你自己也想不到。

订阅几个您感兴趣的标签并坚持不懈,提出好的问题并尝试给出好的答案,我向您保证,随着时间的推移,您会学到这一点(如果您坚持不懈的话)。

Q3)你必须自己回答这个问题。首先决定你要构建什么,毕竟你需要考虑一些迷你项目或其他东西,然后从那里拿走它。

如果您决定使用 CXF 作为构建 REST/SOAP 服务的框架,我建议您查阅这本书Apache CXF Web Service Development。这太棒了,不难阅读,也不太大(双赢)。

于 2012-05-11T19:53:47.737 回答
7

SOAP WS 支持远程过程调用(即 RPC)和面向消息的中间件 (MOM) 集成样式。Restful Web Service 仅支持 RPC 集成样式。

SOAP WS 是传输协议中立的。支持多种协议,如 HTTP(S)、消息传递、TCP、UDP SMTP 等。REST 是特定于传输协议的。仅支持 HTTP 或 HTTPS 协议。

SOAP WS 只允许 XML 数据格式。您定义操作,这些操作通过 POST 建立隧道。重点是访问命名操作并将应用程序逻辑公开为服务。REST 允许多种数据格式,如 XML、JSON 数据、文本、HTML 等。可以使用任何浏览器,因为 REST 方法使用标准的 GET、PUT、POST 和 DELETE Web 操作。重点是访问命名资源并将数据公开为服务。REST 支持 AJAX。它可以使用 XMLHttpRequest 对象。适用于无状态 CRUD(创建、读取、更新和删除)操作。获取 - 代表() 发布 - 接受代表() 放置 - 商店代表() 删除 - 删除代表()

无法缓存基于 SOAP 的读取。可以缓存基于 REST 的读取。更好地执行和扩展。SOAP WS 支持 SSL 安全性和 WS-security,它添加了一些企业安全功能,例如在需要的地方维护安全性,通过中介维护身份,而不仅仅是点对点 SSL,使用不同的安全算法等。REST 仅支持点对点 SSL 安全性。SSL 对整个消息进行加密,无论所有消息是否敏感。SOAP 全面支持针对短期事务的基于 ACID 的事务管理和针对长期运行事务的基于补偿的事务管理。它还支持跨分布式资源的两阶段提交。REST 支持事务,

SOAP 具有内置的成功或重试逻辑,即使通过 SOAP 中介也能提供端到端的可靠性。REST 没有标准的消息传递系统,并且期望调用服务的客户端通过重试来处理通信失败。

来源 http://java-success.blogspot.in/2012/02/java-web-services-interview-questions.html

于 2012-12-18T05:52:59.177 回答
0

如果您的应用程序经常使用 http 协议,那么 REST 是最好的,因为它重量轻,并且知道您的应用程序仅使用 http 协议选择 SOAP 并不是那么好,因为它很重,最好根据我们使用的协议来决定 Web 服务选择在我们的应用程序中。

于 2013-03-25T17:49:13.410 回答