在阅读了很多关于REST和SOAP之间差异的内容后,我得到的结论是REST只是HTTP的另一个词.有人可以解释REST添加到HTTP的功能吗?
注意:我不是在寻找REST与SOAP的比较.
更新:感谢您的回答.现在我已经清楚地知道REST只是一组关于如何使用HTTP的规则.因此,我发布了关于这些惯例的优点的后续行动.
注意:我现在掌握了REST的含义; 正如Emil Ivanov所说,REST意味着使用HTTP的方式.但是,我不确定这是否值得一个自己的术语,我当然不会围绕它进行炒作.
不,REST是应该使用HTTP的方式.
今天我们只使用一小部分HTTP协议的方法 - 即GET
和POST
.REST的方法是使用所有协议的方法.
例如,REST规定了DELETE
擦除URI背后的文档(无论是文件,状态等)的用法,而使用HTTP,您会滥用GET
或者POST
像查询一样...product/?delete_id=22
.
HTTP是用于通信的协议,通常用于与Internet资源或任何具有Web浏览器客户端的应用程序进行通信.
REST意味着您在设计应用程序时使用的主要概念是资源:对于您要执行的每个操作,您需要定义通常只执行CRUD操作的资源,这是一项简单的任务.为此,使用HTTP协议中使用的4个动词对4个CRUD操作非常方便(Get for Read,POST用于CREATE,PUT用于UPDATE,DELETE用于DELETE).这与RPC(远程过程调用)的旧概念不同,在旧概念中,您有一组您希望由于用户的调用而执行的操作.如果您考虑如何在帖子上描述Facebook,使用RPC,您可以创建名为AddLikeToPost和RemoveLikeFromPost的服务,并管理它以及与FB帖子相关的所有其他服务,因此您不需要创建特殊的喜欢的对象.使用REST,您将拥有一个Like对象,该对象将使用Delete和Create功能单独管理.它还意味着它将描述数据库中的单独实体.这可能看起来像一个小的差异,但这样的工作通常会产生更简单的代码和更简单的应用程序.使用该设计,大多数应用程序的逻辑从对象的结构(模型)中显而易见,与RPC通常必须明确添加更多逻辑不同.
设计RESTful应用程序通常要困难得多,因为它要求您以简单的方式描述复杂的事物.仅使用CRUD函数描述所有功能是很棘手的,但在这样做之后,你的生活将变得更加简单,你会发现你会编写更多更短的方法.
存在的另一个限制REST体系结构是在与客户端(无状态)通信时不使用会话上下文,这意味着所有信息需要了解谁是客户端以及他想要的内容与Web消息一起传递.对函数的每次调用都是自描述的,之前没有与客户端的对话,可以在消息中引用.因此,客户端无法告诉您"给我下一页",因为您没有会话来存储上一页和您想要的页面类型,客户端必须说"我的名字是yuval,get我在特定论坛的特定帖子的第2页".这意味着需要在通信中传输更多的数据,但想想找到"让我下一页"功能反对报告的错误之间的区别
当然还有很多东西,但我认为这是茶匙中的主要概念.
REST不会向HTTP添加任何特定功能,但它是与HTTP一起开发的架构风格,并且最常用于其应用层协议的HTTP.
HTTP是一种应用程序协议.REST是一组规则,在遵循这些规则时,您可以构建具有一组特定约束的分布式应用程序.
如果您正在寻找区分RESTful应用程序与任何HTTP应用程序的REST的最重要约束,我会说"自我描述"约束和超媒体约束(也称为超媒体作为应用程序状态引擎(HATEOAS))是最重要的.
自描述约束要求RESTful请求在用户意图中完全自我描述.这允许中间人(代理和缓存)安全地对消息采取行动.
HATEOAS约束是关于将您的应用程序转换为链接Web,其中客户端的当前状态基于其在该Web中的位置.这是一个棘手的概念,需要更多的时间来解释,而不是现在.
不完全的...
http://en.wikipedia.org/wiki/Representational_State_Transfer
REST最初是在HTTP的上下文中描述的,但不限于该协议.RESTful架构可以基于其他应用层协议,如果它们已经基于有意义的表示状态的转移为应用程序提供了丰富且统一的词汇表.RESTful应用程序可以最大限度地利用所选网络协议提供的预先存在的,定义良好的界面和其他内置功能,并最大限度地减少在其上添加新的特定于应用程序的功能.
http://www.looselycoupled.com/glossary/SOAP
(简单对象访问协议)Web服务消息的标准.SOAP基于XML,定义了一种信封格式和用于描述其内容的各种规则.看到(使用WSDL和UDDI)作为Web服务的三个基础标准之一,它是交换Web服务的首选协议,但绝不是唯一的协议; REST的支持者说它增加了不必要的复杂性.
据我了解,REST强制使用可用的HTTP命令,因为它们是用来实现的.
例如,我可以这样做:
GET http://example.com?method=delete&item=xxx
但是休息时我会使用"DELETE"请求方法,不需要"方法"查询参数
DELETE http://example.com?item=xxx
REST是一种接近大系统(如Web)设计的特定方式.
这是一套"规则"(或"约束").
HTTP是一种试图遵守这些规则的协议.