为什么不是基于SOAP的Web服务RESTful?
我知道RESTful是一种架构风格,但究竟是什么使得基于SOAP的Web服务不能算作RESTful呢?
我不清楚下面哪些点(来自维基百科 ),不符合SOAP。
- 客户端服务器
- 无状态
- 可caching
- 分层系统
- 按需代码(可选)
- 统一的界面
- 资源的识别
- 通过这些陈述来操纵资源
- 自我描述的信息
- 超媒体作为应用程序状态的引擎
编辑 :我刚刚遇到这个总结得很好。
REST不是RPC,RPC说,“定义一些做某事的方法”,而REST说,“定义一些资源,他们将有这些方法”。 这是一个微妙而重要的区别,当给定一个URI时,任何人都知道他们可以通过预定义的方法与之交互,并接收标准的HTTP响应。 所以给定http://www.peej.co.uk/我知道我可以发出一个GET并接收一些有意义的东西。 然后,我可能会尝试一个PUT来改变它,并收到一个有意义的HTTP错误代码,因为我没有被授权干涉它。
SOAP遵循RPC模式。 SOAP API描述了一系列方法,以及它们的参数和返回值,可以从代码中调用。 有一个编组步骤将其转化为networking表示。
REST从来不是RPC。 REST API描述了一系列的资源,以及一系列可以作用于它们的动词(通常是HTTP的GET,POST,PUT,DELETE)。
直接回答你的问题:SOAP主要违反了第6点(它不提供跨API的统一的动词集合)。 它也违反了第2点(服务器可以维护每个客户端的状态),结果也是3(状态阻止caching)。
REST和SOAP不是等同的概念。
rest:
- 取决于一个传输协议(HTTP)。
- 充分利用该协议的特定function(动词GET,POST,PUT,DELETE,caching,标题和预定义的错误代码)。
- 没有任何关于消息来回传递的格式。 但是,由于HTTP动词和URL已经定义了要采取的操作,因此消息主体只能包含数据。
- 消息安全性由传输协议(HTTPS)提供,仅为点对点。 如果你想要保证消息的端到端,你必须自己做。
- 最初打算在对象上进行简单的CRUD操作。
肥皂:
- 独立于传输协议(可以是HTTP,FTP,TCP,UDP,命名pipe道,共享内存甚至电子邮件)。
- 只需要传输协议能够发送和接收文本(例如在HTTP上,只使用POST动词)。
- 严格定义来回传递的消息的格式。 SOAP消息包含数据,要执行的操作,头文件和失败时的错误细节。
- 消息安全由WS- *标准提供,并且是端到端的。
- 最初打算任意RPC调用。
以上列表中的项目2和3是不兼容的要点。
REST的目标之一是cachability,因为资源需要由uri(查询string)来标识。 在肥皂的请求被张贴,因此为不同的请求,你有相同的URI,因此资源不能唯一标识的UR
REST只符合http协议。
Restful: REST是使用HTTP协议构buildWeb服务的架构风格,Web服务被视为资源,一些基本的HTTP方法(如GET,POST,DELETE)用于标识资源的标准操作。 REST风格的Web API(也称为REST风格的Web服务)是一个使用HTTP和REST原则实现的Web API。
肥皂:最初定义为简单对象访问协议的SOAP是用于以XMLforms交换结构化信息的协议规范。
SOAP协议:SOAP是一个协议,这意味着它有一个定义的结构。
- POST:SOAP请求总是需要一个HTTP正文,因此HTTP方法是POST。 关于未来POST中的HTTP方法的更多信息(这些在REST中非常相关),但现在让我们假设这在SOAP的情况下总是POST
- SOAP操作:空的意思是HTTP请求URI。
- 内容types:SOAP使用XML作为通信的语言,因此这总是text / xml
- 使用XML命名空间(xmlns)来指示这是一个SOAP请求。
- 是描述请求和响应的根SOAP元素。
RESTful APIdevise涉及根据资源打破系统,并通过Web服务基础上定义的端点(也称为操作)提供对这些资源的访问。 访问是使用标准的HTTP方法完成的,并由auth机制来控制。 资源的configuration通过HTTP状态码的请求和响应来提供和获取以传达状态。 1.资源是系统中存在的实体正在进行RESTful。 例如,在博客网站的情况下,这些可以是博客,post和评论。 2.终点或操作提供了一个可以访问这些资源的机制。 例如,列出特定博客上的所有博客post的端点将是GET on / blogs / {blogId} / posts。 3.基本URI定义资源通过端点可用的web uri位置。 举一个真实的例子,对于Google博客,base_uri是https://www.googleapis.com/blogger/v3 。 4. HTTP方法是REST简单性的地方。 在RESTful APIdevise中,对资源的操作是通过标准的HTTP方法完成的,主要是GET,POST,PUT和DELETE。 其他HTTP方法 – OPTIONS,HEAD,PATCH也在某些情况下使用。
SOAP与REST Web服务
1)SOAP是一个协议,而REST是一种架构风格。
2)SOAP不能使用REST,因为它是一个协议,而REST可以使用SOAP Web服务,因为它是一个概念,可以使用任何协议,如HTTP,SOAP。
3)SOAP使用服务接口来公开业务逻辑,而REST使用URI来公开业务逻辑。
4)SOAP定义了严格遵循的标准,而REST没有定义像SOAP那样太多的标准。
5)SOAP比REST需要更多的带宽和资源,而REST比SOAP需要更less的带宽和资源。
6)SOAP定义了自己的安全性,而REST风格的Web服务inheritance了底层传输的安全措施。
7)SOAP只允许XML数据格式,而REST允许不同的数据格式,如纯文本,HTML,XML,JSON等
REST风格的Web服务比SOAP Web服务更受欢迎。