SOAP URL和REST URL之间有所不同

时间:2014-08-20 19:34:09

标签: java web-services rest soap

目前我正在使用Axis2制作一些REST API。我对SOAP样式url和REST样式url之间的区别感到困惑。谁能解释一下呢?

例如,对于用java编写的服务器API,如下所示:

package cn.edu.xidian;

public class Salary {
    public int getSalary(String name) {
        if ( name.equals("zhangsan") ) {
            return 3000;
        } else if ( name.equals("lisi") ) {
            return 4000;
        } else 
            return 5000;
    }
}

获取此服务的REST网址如下所示:

http://localhost:8080/axis2/services/SalaryService/getSalary?name=zhangsan

如果我的理解是正确的,那么这个url进入服务器端API,使用参数'name'等于'zhangsan'调用方法'getSalary',然后浏览器中的RESTful输出将如下所示:

<ns:getSalaryResponse>
    <ns:return>3000</ns:return>
</ns:getSalaryResponse>

然后SOAP样式URL和相关内容会是什么样子?

1 个答案:

答案 0 :(得分:2)

网址本身不是SOAPREST,而是网址。 (形容词是SOAPy还是RESTful?)

首先,您的REST资源示例:

  http://localhost:8080/axis2/services/SalaryService/getSalary?name=zhangsan

看起来你正在构建一些RPC over HTTP,就像你试图使用准REST结构来实现远程函数调用一样。许多人不会考虑这个好的REST。

SOAP是在某些传输层上实现的XML编码的消息传递系统。

SOAP不仅限于传输HTTP,而REST本质上也是如此。您可以通过HTTP为HTTP传输SOAP并根据需要构建这些URL这一事实无关紧要。此外,大多数SOAP API可能主要通过HTTP在现实中实现的事实也无关紧要。

REST是使用HTTP谓词(PUT,GET,POST等)和响应代码的概念,因为它们旨在作为访问和控制资源的协议。这包括对这些资源的创建,修改,删除等。

SOAP url的结构实际上看起来可能与REST api完全相同,但是使用REST,结构应该强烈反映资源的逻辑结构。您不必完全RESTful,但如果不是,您的REST API不会对开发人员友好。 SOAP并不一定需要具有反映数据结构的漂亮URL,因为您可以提供一个WSDL,该WSDL概述并可以使用您使用的任何URL结构来描述可用的soap服务。事实上,我已经看到了很多完全可以接受的SOAP服务,这些服务似乎随着时间的推移而被随意丢弃,而不是反映任何类型的结构。