5

我已经成功使用了 SOAP 服务。

假设有一个 Web 服务公开了一个返回学生列表的方法。

public Student[] listAllStudents(){
  //some code that return Student array
}

使用 SOAP 需要以下步骤:

  1. 获取 WSDL 位置的 URL。
    例如。http://127.0.0.1/web/service/location/soap.php?wsdl
  2. 使用一些可用的技术,如 axistools-maven-plugin 来生成所有存根类。将生成一个名为Student的类
  3. 使用适当的存根类/接口来调用服务。

    Student[] students = theStub.list_All_Students();

使用 REST 服务将是这样的。

  1. 获取获取学生列表的正确 url。
    例如。http://127.0.0.1/web/service/student/list?sort=true
  2. 使用一些 URL 连接技术,如 java.net.HttpURLConnection 来获取通常为 JSON 格式的结果。
  3. 解析结果。

作为一名 Java 程序员,我在使用SOAP方面没有任何问题,因为有专门为它设计的框架。此外,我只需要知道一个 URL来访问 Web 服务。

使用REST有点混乱。我需要知道所有特定的 URL以及需要传递的查询字符串。从这个角度来看,使用 REST 是相当麻烦的。

我的问题:

  1. 从程序员的角度来看,使用 REST 有用吗?
  2. 有没有什么好的框架可以让 REST 变得更容易?
4

5 回答 5

11

1. 从程序员的角度来看,使用 REST 有用吗?

REST 绝对有用。与您在 SOAP 中使用的方式相比,这是一种利用 Web 服务的不同方式。这是一个快速比较: 在此处输入图像描述

最后,他们每个人都在面向服务的世界中服务于自己的目的。SOAP 成熟但臃肿。REST 相对较年轻,但更自然地适合 HTTP。它具有巨大的潜力,尤其是在服务合同标准落实到位的情况下。当 WADL 成熟时,它将促进 REST 的普及和采用。

2. 有没有什么好的框架可以让使用 REST 变得更容易?

很多。以下是一些已知的REST 框架,其中流行的是 JAX-RS、Jersey、RESTEasy 和 Restlet。

于 2013-04-04T15:14:19.480 回答
3

这是一个相当开放式的问题,但 REST 的互操作性要强得多,更不用说每个查询中的元数据量之大,使其重量不轻。考虑一下您是否必须在 javascript 中查询 SOAP 端点,或者即使是 php 也可能会让人头疼。SOAP 使用契约优先的机制,当您想使用 c# 之类的东西来使用它时,它非常适合。

关于第二个问题,是的,您可以使用 Jackson(仅适用于 JSON)、Spring 中的 RestController 或 JAX-RS 解析 RESTful 响应。

于 2013-04-04T07:39:46.227 回答
2

从程序员的角度来看,是的,我认为 REST 很有帮助。REST 据说可以“完全”使用 Web,因为它通过使用比以前更多的 HTTP 方法——“GET”、“POST”、“DELETE”、“PUT”来释放 Web 的潜力。否则我们主要使用“GET”和“POST”。我喜欢这样想,我们无论如何都必须使用 HTTP 来与现实世界中的 web 服务对话,他们为什么不利用 HTTP 提供的功能。到目前为止(在使用 REST 之前),从程序员的角度来看,HTTP 只是一个“虚拟”(不要认真对待虚拟)协议,只是发送我的数据包和接收我的数据包。有一天,HTTP 来到程序员社区并说:“嘿!我确实有 'DELETE' 和 'PUT'。你想通过使用它们来简化你的 web 服务吗?”

维基百科

 REST uses these operations and other existing features of the HTTP protocol. 
 For example, layered proxy and gateway components perform additional functions 
 on the network, such as HTTP caching and security enforcement.

SOAP 优于 REST 的优点之一是它适用于非无状态协议,例如 TCP、消息队列。REST 在 HTTP 等无状态协议上运行。因为 HTTP 更普遍 REST 似乎主要与 HTTP 一起使用。

关于您关于 REST 框架的问题 - 我使用过JAX-RS并且听说Jersey都是同样不错的选择。

希望这可以帮助!

于 2013-04-04T15:04:50.430 回答
1

REST 更适合 Web 应用程序/最终用户应用程序。它更轻巧。它也是为网络设计的。做真正的 REST 并不是那么简单(你可以搜索一下)。

SOAP 更适合后台应用程序/专业。SOAP 更重量级/复杂/安全/合约优先/完整/允许管理交易。

从 Java 开发人员的角度来看,两者都完成后,REST 更容易实现/集成,这要归功于 Jersey 和 Resteasy 等支持 JSR-311 的堆栈。是的,杰克逊是一个很棒的工具。

今天在推特上看到:):

如果您讨厌某人,请在linkedin 上支持他们的 SOAP API 和瀑布方法

晚上 8:22 · 2013 年 4 月 3 日 · iPhone 版 Twitter

于 2013-04-04T07:54:53.597 回答
1

这个问题实际上是这个问题的副本,相信我,相信评分最高的答案。

SOAP并不简单,互操作性也不是它声称的那样(attributeFormDefaultRPC/encodedvsDocument/literal等...)。如果对于 REST,您需要知道 URL,对于 SOAP,您需要知道要调用什么操作。

如果可以选择,请远离 SOAP。拯救我们的灵魂,让 SOAP 死吧。

编辑

借助JAX-RS和出色的堆栈,例如JerseyRestlet、.. 用于 REST 部分,JacksonXStream等用于 JSON 部分,只需几个注释即可完成 REST 服务。

于 2013-04-04T07:55:45.930 回答