使用SOAP和REST

时间:2013-04-04 07:33:37

标签: java web-services rest soap

我已成功使用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. 的类
  4. 使用适当的存根类/接口来调用服务。

    Student[] students = theStub.list_All_Students();

  5. 使用REST服务将是这样的。

    1. 获取获取学生名单的正确网址 例如。 http://127.0.0.1/web/service/student/list?sort=true
    2. 使用一些URL连接技术(如java.net.HttpURLConnection)来获取通常为JSON格式的结果。
    3. 解析结果。
    4. 作为一名Java程序员,我使用 SOAP 没有问题,因为有为它设计的框架。此外,我只需要知道一个URL 来访问Web服务。

      使用 REST 有点令人困惑。我需要知道所有特定网址以及需要传递的查询字符串。从这个角度来看,使用REST非常麻烦。

      我的问题:

      1. 从程序员的角度来看,使用REST是否有用?
      2. 是否有任何好的框架可以让REST变得更容易?

5 个答案:

答案 0 :(得分:10)

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

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

最后,他们每个人都在服务导向的世界中服务于自己的目的。 SOAP很成熟但很臃肿。 REST相对年轻,但更适合HTTP。它具有巨大的潜力,特别是在实施服务合同标准时。当WADL成熟时,它将提升REST的普及和采用。

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

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

答案 1 :(得分:3)

这是一个非常开放的问题,但REST更具互操作性,更不用说每个查询中的大量元数据使它几乎不重量级。考虑一下你是否必须在javascript中查询SOAP端点,甚至php都可能是一个痛苦的屁股。 SOAP使用契约优先机制,当您想要使用类似c#。

之类的东西时,它非常适合

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

答案 2 :(得分:2)

从程序员的角度来看,是的,我认为REST很有帮助。 REST被称为“完全”使用Web,因为它通过使用比以前更多的HTTP方法来解锁Web潜力 - 'GET','POST','DELETE','PUT'。否则我们大多使用'GET'和'POST'。我喜欢这样思考,我们在现实世界中如何使用HTTP与webservice交谈,为什么不利用HTTP提供的功能。直到现在(在使用REST之前)HTTP从程序员的角度来看,只是发送我的数据包并接收我的数据包,这是一个“虚拟”(不要认真对待虚拟)协议。一天好的HTTP来到程序员社区并说“嘿!我确实'删除'和'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 over REST的一个优点是它适用于非无状态协议,如TCP,消息队列。 REST在无状态协议(如HTTP)上运行。因为HTTP更普遍,所以REST似乎主要用于HTTP。

关于你关于REST框架的问题 - 我使用JAX-RS并且听到Jersey都是同样好的选择。

希望这有帮助!

答案 3 :(得分:1)

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

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

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

今天在Twitter上看到:):

  

如果你讨厌别人,可以在用于SOAP API和瀑布式方法的linkedin上认可它们

     

晚上8:22·4月13日·iPhone推特

答案 4 :(得分:1)

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

SOAP 简单,并且互操作性不是它声称的(attributeFormDefaultRPC/encoded vs Document/literal等......)。 如果对于REST,您需要知道URL,对于SOAP,您需要知道要调用的操作。

如果您可以选择,请远离SOAP。 拯救我们的灵魂,让肥皂消亡。

修改

使用JAX-RS和很棒的堆栈,例如JerseyRestlet,...用于REST部分,JacksonXStream等...用于JSON部分,做REST服务只是一些注释。