如果我只用post和get请求完成工作,为什么要使用REST?
答案 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。
如果你没有做一些这样的事情 - 比如PUT是一种罕见的和潜在的安全漏洞 - 那么你就不会这样做。
答案 6 :(得分:2)
您应该使用REST,因为它实际上包含您要对资源/对象执行的所有潜在操作。
另一个原因是它是每个人都可以实现和使用的标准。要了解为什么标准化很重要,我建议阅读this和this(这很有趣,但真正帮助人们掌握REST的概念)。
答案 7 :(得分:2)
由于以下特性和优势,您应该使用REST:
功能
优点