在阅读了大量关于REST和SOAP之间的区别之后,我的印象是REST只是HTTP的另一种说法。有人能解释一下REST给HTTP添加了什么功能吗?
注意:我并不是在寻找REST和SOAP的比较。
在阅读了大量关于REST和SOAP之间的区别之后,我的印象是REST只是HTTP的另一种说法。有人能解释一下REST给HTTP添加了什么功能吗?
注意:我并不是在寻找REST和SOAP的比较。
当前回答
不,REST是HTTP应该使用的方式。
今天我们只使用了HTTP协议的一小部分方法——即GET和POST。REST的方法是使用协议的所有方法。
例如,REST规定使用DELETE来删除URI后面的文档(可以是文件、状态等),而使用HTTP,您可能会滥用GET或POST查询,如…product/?delete_id=22。
其他回答
REST强制使用可用的HTTP命令,因为它们应该被使用。
例如,我可以这样做:
GET
http://example.com?method=delete&item=xxx
但是休息时,我会使用“DELETE”请求方法,消除对“method”查询参数的需要
DELETE
http://example.com?item=xxx
HTTP是一种在网络上传输消息的通信协议。 SOAP是一种用于交换基于xml的消息的协议,这些消息可以使用HTTP传输这些消息。 Rest是用于交换任何(XML或JSON)消息的协议,这些消息可以使用HTTP来传输。
REST不一定绑定到HTTP。基于rest的web服务只是遵循基于rest的体系结构的web服务。
What is Rest -
1- Client-server
2- Stateless
3- Cacheable
4- Layered system
5- Code on demand
6- Uniform interface
你不知道HTTP和REST之间的区别
因此REST体系结构和HTTP 1.1协议是相互独立的 其他,但HTTP 1.1协议被构建为理想的协议 遵循REST的原则和约束。一种方法是看 HTTP和REST之间的关系是,REST是设计,并且 HTTP 1.1就是这种设计的实现。
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".
当然还有很多,但在我看来,这些是茶匙的主要概念。