在阅读了很多关于REST和SOAP之间差异的内容后,我得到的结论是REST只是HTTP的另一个词 . 有人可以解释REST添加到HTTP的功能吗?
Note :我不是在寻找REST与SOAP的比较 .
Update :谢谢你的回答 . 现在我已经清楚地知道REST只是一组关于如何使用HTTP的规则 . 因此,我发布了关于what the advantages of these conventions are的后续行动 .
Note :我现在掌握REST的含义;作为Emil Ivanov备注,REST意味着使用HTTP的方式's meant to be. However, I'我不确定这是否值得一个自己的术语,我当然不会围绕它进行炒作 .
13 回答
不, REST 是应该使用 HTTP 的方式 .
今天我们只使用一小部分HTTP协议的方法 - 即
GET
和POST
. REST的方法是使用所有协议的方法 .例如,REST规定使用
DELETE
来删除URI后面的文档(无论是文件,状态等),而使用HTTP,您会滥用GET
或POST
查询,如...product/?delete_id=22
.来自You don't know the difference between HTTP and REST
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页“ . 这意味着在通信中需要传输更多的数据,但是想一想在查找“让我下一页”功能报告的错误与“让我在堆栈溢出中找到问题ID 2190836的第2页”之间的区别 .
当然还有很多东西,但我认为这是茶匙中的主要概念 .
REST不向HTTP添加任何特定功能,但它是与HTTP一起开发的架构风格,并且最常使用HTTP作为其应用层协议 .
HTTP是一种应用程序协议 . REST是一组规则,在遵循这些规则时,您可以构建具有一组特定约束的分布式应用程序 .
如果您正在寻找区分RESTful应用程序与任何HTTP应用程序的REST最重要的约束,我会说“自我描述”约束和超媒体约束(也称为超媒体作为引擎)申请状态(HATEOAS)是最重要的 .
自描述约束要求RESTful请求在用户意图中完全自我描述 . 这允许中间人(代理和缓存)安全地对消息采取行动 .
HATEOAS约束是关于将您的应用程序转换为链接Web,其中客户端的当前状态基于其在该Web中的位置 . 这是一个棘手的概念,需要更多的时间来解释,而不是现在 .
不完全的...
http://en.wikipedia.org/wiki/Representational_State_Transfer
http://www.looselycoupled.com/glossary/SOAP
据我了解,REST强制使用可用的HTTP命令,因为它们是用来实现的 .
例如,我可以这样做:
但是休息时我会使用“DELETE”请求方法,不需要“方法”查询参数
REST是一种接近大系统(如Web)设计的特定方式 .
这是一套“规则”(或“约束”) .
HTTP是一种试图遵守这些规则的协议 .
HTTP是一种通过网络传输消息的通信协议 . SOAP是一种交换基于XML的消息的协议,可以使用HTTP来传输这些消息 . Rest是一种协议,用于交换任何可以使用HTTP传输这些消息的(XML或JSON)消息 .
REST 不一定与 HTTP 相关联 . RESTful Web服务只是遵循RESTful架构的Web服务 .
REST =具象国家转移
REST 是一组规则,在遵循这些规则时,您可以构建具有一组特定约束的分布式应用程序 .
REST 是一种交换任何(XML,JSON等)消息的协议,可以使用HTTP来传输这些消息 .
Features:
它是无状态的,这意味着理想情况下客户端和服务器之间不应保持连接 . 客户端有责任将其上下文传递给服务器,然后服务器可以存储此上下文以处理客户端的进一步请求 . 例如,服务器维护的会话由客户端传递的会话标识符标识 .
Advantages of Statelessness:
Web服务可以单独处理每个方法调用 .
Web服务无需维护客户端之前的交互 .
这反过来简化了应用程序设计 .
HTTP本身就是一种与TCP不同的无状态协议,因此RESTful Web服务可以与HTTP协议无缝协作 .
Disadvantages of Statelessness:
Headers 形式的一个额外层需要添加到每个请求以保留客户端的状态 .
为了安全起见,我们需要为每个请求添加标头信息 .
HTTP Methods supported by REST:
GET:/ string / someotherstring它是幂等的,理想情况下每次调用时都应返回相同的结果
PUT:和GET一样 . 幂等并用于更新资源 .
POST:应包含url和body用于创建资源 . 理想情况下,多次调用应返回不同的结果,并应创建多个产品 .
DELETE:用于删除服务器上的资源 .
头:
HEAD方法与GET相同,只是服务器不能在响应中返回消息体 . 响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同 .
选项:
该方法允许客户端确定与资源相关联的选项和/或要求,或服务器的能力,而不暗示资源动作或启动资源检索 .
HTTP Responses
Go here for all the responses .
以下是一些重要的:200 - OK 3XX - 客户端和URL重定向400所需的其他信息 - 错误请求
401 - 未经授权访问
403 - 禁止
请求有效,但服务器拒绝操作 . 用户可能没有资源的必要权限,或者可能需要某种帐户 .
404 - 未找到
找不到请求的资源,但将来可能会提供 . 客户的后续请求是允许的 .
405 - 不允许的方法请求的资源不支持请求方法;例如,表单上的GET请求需要通过POST呈现数据,或者在只读资源上呈现PUT请求 .
404 - 未找到请求
500 - 内部服务器故障
502 - 错误的网关错误
REST APIs must be hypertext-driven
从Roy Fielding's blog这里's a set of ways to check if you'重新构建HTTP API或REST API:
HTTP is a contract, a communication protocol and REST is a concept, an architectural style
可能使用HTTP,FTP或其他通信协议,但广泛用于HTTP .REST implies a series of constraints about how Server and Client should interact
.HTTP is a communication protocol with a given mechanism for server-client data transfer
,它最常用于REST API,因为在定义REST之前REST was inspired by WWW (world wide web) which largely used HTTP
,因此使用HTTP实现REST API样式更容易 .1.
服务器和客户端之间的交互应仅通过超文本描述 .2.
服务器和客户端应松散耦合,不要相互假设 . 客户端应该只知道资源入口点 . 交互数据应由响应中的服务器提供 .3.
服务器不应存储有关请求上下文的任何信息 . 请求必须是独立且幂等的(意味着如果同一请求无限重复,则检索到完全相同的结果)HTTP只是一种可以帮助实现这一目标的通信协议(工具) .
有关更多信息,请查看以下链接
https://martinfowler.com/articles/richardsonMaturityModel.html http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven