【问题标题】:Using SOAP and REST使用 SOAP 和 REST
【发布时间】:2013-04-04 07:33:36
【问题描述】:

我已经成功使用了 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 变得更容易?

【问题讨论】:

标签: java web-services rest soap


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我认为在 JavaScript 的情况下你是对的,REST 在那里会非常方便。 +1
    • 我曾经使用 jQuery 解析 SOAP 只是为了发送到一种方法,所以它只是一个 XML curl 请求,但事后回想我应该刚刚从服务器端完成 SOAP 请求并完成对我的服务器的本地 curl 请求。
    【解决方案3】:

    从程序员的角度来看,是的,我认为 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 都是同样好的选择。

    希望这会有所帮助!

    【讨论】:

      【解决方案4】:

      这个问题实际上与this question 重复,相信我,相信评分最高的答案。

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

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

      编辑

      有了JAX-RS 和像JerseyRestlet、.. 等伟大的堆栈,用于 REST 部分,JacksonXStream 等.. 用于 JSON 部分,做 REST 服务只是一些注释离开。

      【讨论】:

      • 我想,我需要更加熟悉 REST 才能发现它比 SOAP 更有用。好点。 +1
      【解决方案5】:

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

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

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

      今天在推特上看到了:):

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

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

      【讨论】:

        猜你喜欢
        • 2014-03-16
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多