在阅读了大量关于REST和SOAP之间的区别之后,我的印象是REST只是HTTP的另一种说法。有人能解释一下REST给HTTP添加了什么功能吗?
注意:我并不是在寻找REST和SOAP的比较。
在阅读了大量关于REST和SOAP之间的区别之后,我的印象是REST只是HTTP的另一种说法。有人能解释一下REST给HTTP添加了什么功能吗?
注意:我并不是在寻找REST和SOAP的比较。
当前回答
HTTP是一种用于通信的协议,通常用于与互联网资源或web浏览器客户端的任何应用程序通信。
REST意味着您在设计应用程序时使用的主要概念是资源:对于您想要执行的每个操作,您需要定义一个资源,您通常只在该资源上执行CRUD操作,这是一个简单的任务。为此,使用HTTP协议中使用的四个动词来对抗四个CRUD操作非常方便(GET用于读取,POST用于创建,PUT用于更新,DELETE用于删除)。
这与RPC(远程过程调用)的旧概念不同,在RPC中,作为用户调用的结果,您有一组希望执行的操作。例如,如果你考虑如何在一个帖子上描述一个Facebook点赞,使用RPC,你可能会创建名为AddLikeToPost和RemoveLikeFromPost的服务,并管理它与所有与Facebook帖子相关的其他服务,因此你不需要为点赞创建特殊对象。
使用REST,您将拥有一个Like对象,它将与Delete和Create函数分开管理。这也意味着它将在数据库中描述一个单独的实体。这看起来可能是一个很小的差异,但这样工作通常会产生更简单的代码和更简单的应用程序。通过这种设计,应用程序的大部分逻辑从对象的结构(模型)中是显而易见的,不像RPC,你通常必须显式地添加更多的逻辑。
设计RESTful应用程序通常要困难得多,因为它要求您以简单的方式描述复杂的事情。仅使用CRUD函数描述所有功能是很棘手的,但这样做之后,您的生活将简单得多,并且您将发现您编写的方法更短。
One more restraint REST architecture presents is not to use a session context when communicating with a client (stateless), meaning all the information needed to understand who is the client and what he wants is passed with the web message. Each call to a function is self-descriptive, there is no previous conversation with the client which can be referenced in the message. Therefore, a client could not tell you "give me the next page" since you don't have a session to store what is the previous page and what kind of page you want, the client would have to say "my name is Yuval, get me page 2 of a specific post in a specific forum". This means a bit more data would have to transfer in the communication, but think of the difference between finding a bug reported from the "get me the next page" function in oppose to "get me page 2 of question ID 2190836 in stack overflow".
当然还有很多,但在我看来,这些是茶匙的主要概念。
其他回答
HTTP是一种应用协议。REST是一组规则,遵循这些规则,您就可以构建具有特定约束集的分布式应用程序。
如果您正在寻找REST中区分RESTful应用程序与任何HTTP应用程序的最重要的约束,我会说“自描述”约束和超媒体约束(又名hypermedia as the Engine of application State (HATEOAS))是最重要的。
自描述约束要求RESTful请求在用户意图中是完全自描述的。这允许中介(代理和缓存)安全地对消息进行操作。
HATEOAS约束是关于将您的应用程序转换为一个链接网络,其中客户端的当前状态基于它在该网络中的位置。这是一个棘手的概念,需要比现在更多的时间来解释。
HTTP是一种在网络上传输消息的通信协议。 SOAP是一种用于交换基于xml的消息的协议,这些消息可以使用HTTP传输这些消息。 Rest是用于交换任何(XML或JSON)消息的协议,这些消息可以使用HTTP来传输。
REST强制使用可用的HTTP命令,因为它们应该被使用。
例如,我可以这样做:
GET
http://example.com?method=delete&item=xxx
但是休息时,我会使用“DELETE”请求方法,消除对“method”查询参数的需要
DELETE
http://example.com?item=xxx
不,REST是HTTP应该使用的方式。
今天我们只使用了HTTP协议的一小部分方法——即GET和POST。REST的方法是使用协议的所有方法。
例如,REST规定使用DELETE来删除URI后面的文档(可以是文件、状态等),而使用HTTP,您可能会滥用GET或POST查询,如…product/?delete_id=22。
不太……
http://en.wikipedia.org/wiki/Representational_State_Transfer
REST was initially described in the context of HTTP, but is not limited to that protocol. RESTful architectures can be based on other Application Layer protocols if they already provide a rich and uniform vocabulary for applications based on the transfer of meaningful representational state. RESTful applications maximise the use of the pre-existing, well-defined interface and other built-in capabilities provided by the chosen network protocol, and minimise the addition of new application-specific features on top of it.
http://www.looselycoupled.com/glossary/SOAP
(简单对象访问协议 web服务消息的标准。 SOAP基于XML定义了一个信封 格式和各种规则 描述它的内容。见过( WSDL和UDDI)作为三者之一 web服务的基础标准, 它是用于 交换web服务,但不是 意思是唯一的;REST的支持者 说它增加了不必要的东西 的复杂性。