为什么不是基于SOAP的Web服务RESTful?

我知道RESTful是一种架构风格,但究竟是什么使得基于SOAP的Web服务不能算作RESTful呢?

我不清楚下面哪些点(来自维基百科 ),不符合SOAP。

  1. 客户端服务器
  2. 无状态
  3. 可caching
  4. 分层系统
  5. 按需代码(可选)
  6. 统一的界面
    • 资源的识别
    • 通过这些陈述来操纵资源
    • 自我描述的信息
    • 超媒体作为应用程序状态的引擎

编辑 :我刚刚遇到这个总结得很好。

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是一个协议,这意味着它有一个定义的结构。

  1. POST:SOAP请求总是需要一个HTTP正文,因此HTTP方法是POST。 关于未来POST中的HTTP方法的更多信息(这些在REST中非常相关),但现在让我们假设这在SOAP的情况下总是POST
  2. SOAP操作:空的意思是HTTP请求URI。
  3. 内容types:SOAP使用XML作为通信的语言,因此这总是text / xml
  4. 使用XML命名空间(xmlns)来指示这是一个SOAP请求。
  5. 是描述请求和响应的根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服务更受欢迎。