我理解RESTful是一种架构风格,但究竟是什么让基于SOAP的Web服务不计入RESTful?
我不清楚下面(来自维基百科)的哪些内容不符合SOAP.
客户端服务器
无状态
可缓存
分层系统
按需代码(可选)
统一界面
确定资源
通过这些表示来操纵资源
自我描述性的信息
超媒体作为应用程序状态的引擎
编辑:我刚刚遇到这个,很好地总结了它.
REST不是RPC,RPC说,"定义一些做某事的方法",而REST说,"定义一些资源,他们将拥有这些方法".这是一个微妙但重要的区别,当给定URI时,任何人都知道他们可以通过预定义的方法集与它进行交互并接收标准的HTTP响应.所以给了 http://www.peej.co.uk/我知道我可以发出一个GET并收到一些有意义的回复.然后我可以尝试使用PUT来更改它并接收有意义的HTTP错误代码,因为我没有被授权干涉它.
Christian Ha.. 56
REST和SOAP不是等同的概念.
休息:
取决于一种传输协议(HTTP).
充分利用该协议的特定功能(动词GET,POST,PUT,DELETE,缓存,标头和预定义的错误代码).
对来回传递的消息格式一无所知.但是,由于HTTP谓词和URL已定义要执行的操作,因此消息正文必须仅包含数据.
消息安全性由传输协议(HTTPS)提供,并且仅是点对点的.如果您想要端到端地保护邮件,则必须自己完成.
最初用于对象的简单CRUD操作.
肥皂:
独立于传输协议(可以是HTTP,FTP,TCP,UDP,命名管道,共享内存甚至电子邮件).
仅需要传输协议能够发送和接收文本(例如,在HTTP上,仅使用POST动词).
严格定义来回传递的消息格式.SOAP消息包含数据,要对其执行的操作,标头以及发生故障时的错误详细信息.
消息安全性由WS-*标准提供,并且是端到端的.
最初用于任意RPC调用.
上面列表中的第2和第3项是不兼容的要点.
REST和SOAP不是等同的概念.
休息:
取决于一种传输协议(HTTP).
充分利用该协议的特定功能(动词GET,POST,PUT,DELETE,缓存,标头和预定义的错误代码).
对来回传递的消息格式一无所知.但是,由于HTTP谓词和URL已定义要执行的操作,因此消息正文必须仅包含数据.
消息安全性由传输协议(HTTPS)提供,并且仅是点对点的.如果您想要端到端地保护邮件,则必须自己完成.
最初用于对象的简单CRUD操作.
肥皂:
独立于传输协议(可以是HTTP,FTP,TCP,UDP,命名管道,共享内存甚至电子邮件).
仅需要传输协议能够发送和接收文本(例如,在HTTP上,仅使用POST动词).
严格定义来回传递的消息格式.SOAP消息包含数据,要对其执行的操作,标头以及发生故障时的错误详细信息.
消息安全性由WS-*标准提供,并且是端到端的.
最初用于任意RPC调用.
上面列表中的第2和第3项是不兼容的要点.
SOAP遵循RPC模式.SOAP API描述了一系列方法及其参数和返回值,您可以从代码中调用这些方法.有一个编组步骤将其转换为它的网络表示.
REST绝不是RPC.REST API描述了一系列资源,以及一组可以对其起作用的动词(通常是HTTP的GET,POST,PUT,DELETE).
直接回答您的问题:SOAP主要违反第6点(它不提供跨API的统一动词集).它也违反了第2点(服务器可以维护每个客户端的状态),结果也是第3点(状态阻止缓存).
REST的目标之一是可达性,因为资源需要由uri(查询字符串)来识别.在soap中发布请求,因此对于具有相同uri的不同请求,因此资源不能由您唯一标识