HTTP和REST有什么区别?

在仔细阅读了REST和SOAP之间的差异之后,我得到了REST只是HTTP的另一个词的印象。 有人可以解释REST向HTTP添加了哪些function?

注意 :我不是在寻找REST和SOAP的比较。

更新 :感谢您的答案。 现在已经很清楚,REST只是一套关于如何使用HTTP的规则。 因此,我发布了关于这些公约的优点的后续行动。

注意 :我现在掌握REST的含义; 正如埃米尔·伊万诺夫 ( Emil Ivanov)所言,REST意味着使用HTTP的方式。 不过,我不确定这是否值得自己一个名词,我当然不会在这方面大肆宣传。

不, REST是应该使用 HTTP的方式。

今天我们只使用HTTP协议的一小部分方法 – 即GETPOST 。 REST的方法是使用所有协议的方法。

例如,REST规定使用DELETE擦除URI后面的文档(不pipe是文件,状态等),而使用HTTP,则会滥用GETPOST查询,如...product/?delete_id=22

REST并没有向HTTP添加任何特定的function,而是一种与HTTP协同开发的架构风格,并且最常使用HTTP来实现其应用层协议。

HTTP是用于通信的协议,通常用于与互联网资源或任何与Web浏览器客户端的应用程序进行通信。

REST意味着您在devise应用程序时使用的主要概念是资源:对于您要执行的每个操作,您需要定义一个资源,在这个资源上通常只执行CRUD操作,这是一个简单的任务。 因为使用HTTP协议中使用的4个动词对4个CRUD操作(Get for Read,POST用于CREATE,PUT用于UPDATE,DELETE用于DELETE)非常方便。 这与RPC(远程过程调用)的旧概念不同,在这个概念中,您有一组您想要执行的操作,作为用户调用的结果。 如果你认为例如如何在一篇文章中描述Facebook,使用RPC,你可以创build名为AddLikeToPost和RemoveLikeFromPost的服务,并将其与所有与FBpost相关的其他服务一起pipe理,因此您不需要创build特殊对象为Like。 在REST中,您将有一个Like对象,它将与Delete和Create函数分开pipe理。 这也意味着它会在你的数据库中描述一个独立的实体。 这可能看起来像一个小小的差异,但像这样的工作通常会产生更简单的代码和更简单的应用程序。 使用这种devise,应用程序的大部分逻辑在对象的结构(模型)中是显而易见的,与RPC通常不得不明确添加更多的逻辑不同。

deviseRESTful应用程序通常比较困难,因为它要求您以简单的方式描述复杂的事情。 只使用CRUD函数描述所有的function是非常棘手的,但是做完这些之后,你的生活会变得简单得多,你会发现你会写很多更简单的方法。

还有一种克制的REST体系结构不是在与客户端(无状态)进行通信时使用会话上下文,这意味着所有的信息都需要了解谁是客户端,他想要的是通过Web消息传递的。 每个对函数的调用都是自描述的,在消息中没有可以引用的客户端之前的对话。 因此客户不能告诉你“给我下一页”,因为你没有一个会话来存储什么是前一页和你想要什么样的页面,客户将不得不说“我的名字是yuval,得到我在特定论坛中的特定post的第2页“。 这意味着更多的数据将不得不在通信中传输,但是想一想从“get me next page”函数中find一个反对“堆栈溢出”中的问题ID为2190836的页面2的错误。

当然,还有更多,但我认为这是一茶匙的主要概念。

HTTP是一个应用程序协议。 REST是一组规则,当遵循时,使您能够构build具有特定的所需约束的分布式应用程序。

如果您正在寻找将RESTful应用程序与任何HTTP应用程序区分开来的最重要的REST约束条件,那么我会说“自我描述”约束和超媒体约束(即超媒体作为应用程序状态引擎(HATEOAS))是最重要的。

自我描述约束要求RESTful请求在用户意图中是完全自我描述的。 这允许中介(代理和caching)安全地处理消息。

HATEOAS约束是关于将您的应用程序变成一个链接networking,其中客户端的当前状态是基于其在networking中的位置。 这是一个棘手的概念,需要更多的时间来解释比我现在。

不完全的…

http://en.wikipedia.org/wiki/Representational_State_Transfer

REST最初是在HTTP的上下文中描述的,但不限于该协议。 RESTful体系结构可以基于其他应用层协议,如果它们已经为基于有意义表示状态的转移的应用提供了丰富和统一的词汇。 REST风格的应用程序最大限度地利用了预先存在的,定义明确的接口和所选networking协议提供的其他内置function,并最大限度地减less了在其之上新增的特定于应用程序的function。

http://www.looselycoupled.com/glossary/SOAP

(简单对象访问协议)Web服务消息的标准。 SOAP基于XML定义了信封格式和各种规则来描述其内容。 看到(使用WSDL和UDDI)作为Web服务的三个基础标准之一,它是用于交换Web服务的首选协议,但绝不是唯一的协议。 REST的支持者说,它增加了不必要的复杂性。

REST是一个接近大系统devise(如网页)的具体方式。

这是一套“规则”(或“约束”)。

HTTP是一个试图遵守这些规则的协议。

据我了解,REST强制使用可用的HTTP命令。

例如,我可以这样做:

 GET http://example.com?method=delete&item=xxx 

但rest,我会使用“DELETE”请求方法,删除“方法”查询参数的需要

 DELETE http://example.com?item=xxx 

REST不一定绑定到HTTP 。 REST风格的Web服务只是遵循RESTful架构的Web服务。

 What is Rest - 1- Client-server 2- Stateless 3- Cacheable 4- Layered system 5- Code on demand 6- Uniform interface 

REST仅通过HTTP。 HTTP是最广泛使用的,当我们谈论REST Web服务时,我们只假设HTTP。 HTTP定义了与其方法(GET,POST,PUT,DELETE,PATCH等)的接口以及可以统一使用的与资源交互的各种头文件。 这种均匀性也可以通过其他协议来实现。

REST允许许多不同的数据格式,因为SOAP只允许XML。 虽然这看起来似乎增加了REST的复杂性,因为您需要处理多种格式,但根据我的经验,这实际上是非常有益的。 JSON通常更适合数据并且parsing得更快。 由于支持JSON,REST可以更好地支持浏览器客户端。

HTTP是通过networking传输消息的通信协议。 SOAP是一种交换基于XML的消息的协议,可以使用HTTP来传输这些消息。 Rest是一种协议,用于交换可以使用HTTP传输这些消息的任何(XML或JSON)消息。

REST =具象状态传输

REST是一组规则,当遵循时,使您能够构build具有特定的所需约束的分布式应用程序。

REST是一种协议,用于交换可以使用HTTP传输这些消息的任何(XML,JSON等)消息。

特征:

这是无状态的,这意味着在客户端和服务器之间理想的是不应该保持连接。 客户端负责将其上下文传递给服务器,然后服务器可以存储这个上下文来处理客户端的进一步请求。 例如,由服务器维护的会话由客户端传递的会话标识符来标识。

无状态的优势:

  1. Web服务可以分别处理每个方法调用。
  2. Web服务不需要维护客户以前的交互。
  3. 这又简化了应用程序devise。
  4. HTTP本身就是一个与TCP不同的无状态协议,因此RESTful Web服务可以与HTTP协议无缝协作。

无状态的缺点:

  1. 标题forms的一个额外的层需要被添加到每个请求,以保持客户端的状态。
  2. 为了安全起见,我们需要为每个请求添加一个标题信息。

REST支持的HTTP方法:

GET:/ string / someotherstring它是幂等的,每次打电话时理想的返回相同的结果

PUT:和GET一样。 幂等性,用于更新资源。

POST:应该包含一个url和body用于创build资源。 多次调用理想情况下应返回不同的结果,并应创build多个产品。

删除:用于删除服务器上的资源。

头:

HEAD方法与GET相同,只是服务器不能在响应中返回消息体。 响应HEAD请求的HTTP头中包含的元信息应该与为响应GET请求而发送的信息相同。

选项:

此方法允许客户端确定与资源相关的选项和/或需求或服务器的function,而不会暗示资源操作或启动资源检索。

HTTP响应

去这里所有的答复 。

以下是一些重要的信息:200 – OK 3XX – 客户端需要的附加信息和URLredirect400 – 错误的请求
401 – 未经授权访问
403 – 禁止
请求是有效的,但服务器拒绝操作。 用户可能没有资源所需的权限,或者可能需要某种帐户。

错误(404
请求的资源找不到,但可能在将来可用。 客户的后续请求是允许的。

405 – 方法不允许所请求的资源不支持请求方法; 例如,需要通过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。

404 – 请求未find
500 – 内部服务器故障
502 – 错误的网关错误

HTTP代表超文本传输​​协议,是传输文件的一种方式。 这个协议被用来连接我们称之为万维网的超文本页面。 但是,还有其他传输协议可用,如FTP和地鼠,但它们不太受欢迎。

REpresentational State Transfer或REST是一组确保可扩展,容错和易扩展的系统的约束。 万维网就是这种系统的一个例子(也许是最大的例子)。 REST本身并不是一项新发明,而是像万维网这样的系统的文档。

让人迷惑的一件事是,REST和HTTP似乎是相辅相成的。 毕竟,万维网本身运行在HTTP上,而且有意义,一个RESTful API也是这样。 但是,REST约束中没有任何内容将HTTP的使用作为传输协议强制使用。 使用其他传输协议,如SNMP,SMTP和其他协议是完全可能的,您的API仍然可以成为一个RESTful API