我们为什么要使用REST?

时间:2011-03-16 01:25:48

标签: http rest

如果我只用post和get请求完成工作,为什么要使用REST?

8 个答案:

答案 0 :(得分:58)

Roy Fielding在博文中对RPCs masquerading as REST感到沮丧。

REST要求使用超文本,因为客户端和服务器之间的耦合非常松散,因此可以很好地扩展。使用REST,服务器可以随意更改公开的资源。除了REST本身定义之外,没有固定的API。客户端只需要知道初始URI,然后从服务器提供的选项中选择导航或执行操作。服务器可以将代码下载到客户端,这有助于导航和状态表示。

所有这些与各种远程过程调用(RPC)方案形成鲜明对比,其中客户端和服务器必须就通常需要编译到两端的详细协议达成一致(例如,在特定形式的URI中访问的一个极端的特定顺序,另一个极端的SOAP / WSDL / WS *)。这种方法很脆弱,因为任何更改都需要同时在服务器端和客户端上实现。随着服务器和/或客户端数量的增长,它会迅速变得无法维持。服务器尤其受到影响,因为随着人气的增加,已发布API的演变变得越来越困难。

鉴于这些因素,REST在可能的情况下始终是更好的选择。它允许服务器的快速发展,并允许天文数量的应用程序在临时基础上自由交互(例如整个互联网)。

但是“何时可能”部分呢?当循环中有人时,REST效果最佳。毕竟,人类很有可能在提供一组先前未知的选项时做出理性选择。机器还没有。 Web RPC协议的诞生正是为了将双方手铐都固定在一个固定的协议上。这样,当人从图片中移除时,自动化过程更容易进行通信。当纯粹的自动化操作比进化和可扩展性更重要时(在Internet时间和Internet规模上),RPC是一种有效的设计选择。

比例和耦合?

这里的“比例”是指广义的意思。它包括用户和会话的数量,是的,还包括应用程序大小和开发过程。紧耦合对应用尺寸造成严重阻碍。如果没有REST架构提供的极其松散的耦合,很难想象存在最大的已知应用程序万维网。全球数百万开发人员已经合作构建了支持数十亿用户的应用程序。然而,开发人员这样做,同时仍然没有意识到彼此(或者至少他们不会相互意识到,如果不是StackOverflow;)。

REST的主要使能原则是超文本。该架构的其他元素存在以非常大规模(在任何意义上)支持该原则。 REST是否可以构建Web的唯一可行方式?不,但它恰好是事实上成功的标准。它应该是生态系统中任何新条目的默认选择,只有在仔细和明确的设计考虑之后才会被丢弃。

答案 1 :(得分:6)

正确使用REST可以帮助您的系统组件保持正确分离,并且将来可以比以典型类似RPC的方式将它们直接捆绑在一起更容易进化。这是您必须根据应用程序的需求进行的架构选择。其他人已经注意到了一些技术上的好处,也应该考虑到它们。

答案 2 :(得分:5)

REST允许轻松演变API设计。这是REST的关键 - 你正在创建一个API。一些评论涉及这一思想的各个方面,但实际上并未将核心问题付诸实践。在处理REST时,您正在创建一个供客户(或您自己)使用的API。资源上的HTTP操作向客户端提供了API设计和功能的明确指示。因此,当我们正确使用正确的HTTP动词时,我们正在声明一个标准化且可从客户端角度理解的API。

答案 3 :(得分:3)

如果您的GET请求不是idempotent,则服务器和客户端之间的HTTP缓存将中断您的应用程序。根据定义,POST请求不是幂等的,因此HTTP缓存不会缓存这些请求和结果:您仍然可以获得缓存GET请求的好处,而不会破坏应用程序的协议。非常成功。

而且,如果您需要删除对象,那么DELETE在线路和日志上的读取将比执行删除的POST请求更容易。但是网页浏览器无法使用DELETE动词轻松发出HTTP请求,因此对于自己编程的客户来说更是如此。

答案 4 :(得分:3)

REST中的发现要容易得多。我们有WADL文档(类似于传统Web服务中的WSDL),可以帮助您向世界宣传您的服务。您也可以使用UDDI发现。使用传统的HTTP POST和GET,人们可能不知道您的消息请求和响应模式给您打电话。

答案 5 :(得分:2)

为什么你认为只使用POST和GET意味着它不是REST?

REST的要点是每个“资源”都有一个资源标识符,一个URI。每个URI 可能都有GET POST,PUT,DELETE。

  • 获取GET
  • POST更新
  • PUT is create
  • 删除删除。

如果你没有做一些这样的事情 - 比如PUT是一种罕见的和潜在的安全漏洞 - 那么你就不会这样做。

答案 6 :(得分:2)

您应该使用REST,因为它实际上包含您要对资源/对象执行的所有潜在操作。

  • GET - 根据给定条件检索资源
  • POST - 创建资源
  • PUT - 使用给定的更新属性更新资源
  • 删除 - 删除资源

另一个原因是它是每个人都可以实现和使用的标准。要了解为什么标准化很重要,我建议阅读thisthis(这很有趣,但真正帮助人们掌握REST的概念)。

答案 7 :(得分:2)

由于以下特性和优势,您应该使用REST:

  

功能

  1. 无状态客户端/服务器协议:每个HTTP都包含运行它的所有必要信息,这意味着客户端和服务器都不需要记住任何以前的状态来满足它。尽管如此,一些HTTP应用程序包含缓存内存。这配置了所谓的无状态客户端缓存服务器协议:可以将对特定HTTP请求的一些响应定义为可缓存,因此客户端可以在将来对相同的请求运行相同的响应。但是,选项存在的事实并不意味着它是最推荐的。
  2. 任何REST系统和HTTP规范中有四个非常重要的数据事务:POST(创建),GET(读取和咨询),PUT(编辑)和DELETE。
  3. REST中的对象始终从URI 进行操作。它是URI,没有其他元素是此REST系统中每个资源的唯一标识符。 URI允许我们访问信息以更改或删除信息,或者例如与第三方共享其确切位置。
  4. 统一接口:为了传输数据,REST系统对资源应用特定操作(POST,GET,PUT和DELETE),前提是它们用URI标识。这样可以更容易地获得统一的界面,使信息过程系统化。
  5. 层系统:组件之间的分层架构。每个层都具有REST系统中的功能。
  6. 使用超媒体:超媒体是Ted Nelson在1965年创造的一个术语,是超文本概念的延伸。这个概念用于网页开发,允许用户通过HTML链接浏览对象集。在REST API的情况下,超媒体的概念解释了应用程序开发接口的能力,以便为客户端和用户提供足够的链接来对数据运行特定的操作。
  7.   

    优点

    1. 客户端和服务器之间的分离:REST协议将用户界面与服务器和数据存储完全分开。这在开发时具有一些优势。例如,它提高了界面对其他类型平台的可移植性,增加了项目的可扩展性,并允许开发的不同组件独立发展。
    2. 可见性,可靠性和可扩展性。客户端和服务器之间的分离有一个明显的优势,那就是每个开发团队都可以在没有太多问题的情况下扩展产品。如果正确发送每个请求的数据,他们可以迁移到其他服务器或在数据库中进行各种更改。这种分离使得前端和后端更容易在不同的服务器上运行,这使得应用程序更易于使用。
    3. REST API始终独立于一个或多个平台的类型:REST API始终适应所使用的语法或平台类型,这在更改或测试新环境时提供了相当大的自由度发展。使用REST API,您可以拥有PHP,Java,Python或Node.js服务器。唯一的事情是,对请求的响应应始终以用于信息交换的语言(通常是XML或JSON)进行,这是必不可少的。
    4. Source