目前我正在使用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和相关内容会是什么样子?
答案 0 :(得分:2)
网址本身不是SOAP
或REST
,而是网址。 (形容词是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服务,这些服务似乎随着时间的推移而被随意丢弃,而不是反映任何类型的结构。