Java SOAP url和REST url之间的不同

Java SOAP url和REST url之间的不同,java,web-services,rest,soap,Java,Web Services,Rest,Soap,目前我正在使用Axis2制作一些RESTAPI。我对SOAP样式url和REST样式url之间的区别感到困惑。有人能解释一下吗 例如,对于用java编写的服务器API,如下所示: package cn.edu.xidian; public class Salary { public int getSalary(String name) { if ( name.equals("zhangsan") ) { return 3000;

目前我正在使用Axis2制作一些RESTAPI。我对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 url如下所示:

http://localhost:8080/axis2/services/SalaryService/getSalary?name=zhangsan
<ns:getSalaryResponse>
    <ns:return>3000</ns:return>
</ns:getSalaryResponse>
如果我的理解是正确的,这个url进入服务器端API,用参数'name'等于'zhangsan'调用方法'getSalary',然后浏览器中的RESTful输出将如下所示:

http://localhost:8080/axis2/services/SalaryService/getSalary?name=zhangsan
<ns:getSalaryResponse>
    <ns:return>3000</ns:return>
</ns:getSalaryResponse>

3000

那么SOAP风格的URL和相关的东西会是什么样子呢

URL本身不是
SOAP
REST
,而是一个URL。(形容词是SOAPy和RESTful吗?)

首先,您的REST资源示例:

  http://localhost:8080/axis2/services/SalaryService/getSalary?name=zhangsan
看起来您正在通过HTTP构建某种类型的RPC,就像您试图使用准REST结构来实现远程函数调用一样。许多人不认为这是好的休息。 SOAP是在某个传输层上实现的XML编码的消息传递系统

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

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


soapurl的结构实际上可能看起来完全像restapi,但是对于REST,该结构应该强烈地反映资源的逻辑结构。您不必完全使用RESTful,但如果不使用RESTAPI,您的RESTAPI将不利于开发人员。SOAP不一定需要有反映数据结构的好的URL,因为您可以提供一个WSDL,它概述并描述您使用的任何URL结构中可用的SOAP服务。事实上,我已经看到很多完全可以接受的SOAP服务,它们的url似乎随时间的推移被任意删除,而不反映任何类型的结构。

你能给我一个SOAP url的例子吗?任何url都可以是“SOAP”或“REST”url。URL只是一个位置。对于REST,它是SOAP传输消息时的一种资源。关于SOAP与REST的一些见解,下面是最史诗般的答案之一: