如果我只需要使用post和get请求就能完成工作,为什么还要使用REST?
但是“可能时”的部分怎么办?当有人参与时,REST的效果最佳。毕竟,面对以前未知的选项集时,人类有很大机会能够做出理性选择。机器还没有那么智能。 Web RPC协议的诞生恰好是为了将双方都限制在固定的协议中。这使得自动化流程在去除人类因素的情况下进行通信更加容易。当纯自动化操作比进化和可扩展性(在互联网时间和互联网规模上)更重要时,RPC是一种有效的设计选择。
规模和耦合?
这里的“规模”是广义的。它包括用户和会话数量,应用程序大小和开发过程。紧密耦合对应用程序大小构成严重障碍。很难想象世界上已知最大的应用程序——万维网——没有REST架构提供的极松散的耦合。全球数百万开发人员合作构建了支持数十亿用户的此应用程序。然而,开发人员在保持彼此无意识的同时完成了这项工作(或者至少如果没有StackOverflow的话他们就会不知道彼此;)。
REST的主要启用原则是超文本。架构的其他元素存在于非常大规模(在各个方面)中以支持该原则。REST是Web可能被构建的唯一可考虑的方式吗?不是。但它恰好是极其成功的事实标准。对于生态系统中的任何新条目,它应该是默认选择,仅在经过仔细和明确的设计考虑后才放弃。
正确使用REST可以帮助您的系统组件保持适当的解耦,并且可以比典型的RPC方式将它们直接绑定在一起更容易地进行未来演进。这是基于您的应用程序需求而必须做出的架构选择。其他人已经注意到了一些技术上的好处,也应该考虑它们。
REST允许API设计的轻松演进。这就是REST的关键之处 - 您正在创建一个API。一些评论提到了这种思想的某些方面,但实际上并没有将核心问题解释清楚。 当您使用REST时,您正在创建一个将被客户端(或自己)使用的API。资源上的HTTP操作清晰地向客户端指示API的设计和功能。因此,当我们正确地使用HTTP动词时,我们正在声明一个从客户端角度标准化且易理解的API。
GET
请求不是幂等的,那么服务器和客户端之间的HTTP缓存将会破坏您的应用程序。根据定义,POST
请求不是幂等的,因此HTTP缓存不会缓存这些请求和结果:您仍然可以获得GET
请求的缓存优势,而不会破坏您的应用程序协议。非常成功。DELETE
在传输和日志中比执行删除操作的POST
请求更容易阅读。但是,Web浏览器无法轻松地使用DELETE
动词进行HTTP请求,因此它更适用于您自己编写的客户端。在REST中,发现(Discovery)更加容易。我们有WADL文档(类似于传统Web服务中的WSDL),可以帮助您向世界宣传您的服务。您也可以使用UDDI发现。对于传统的HTTP POST和GET,人们可能不知道您的消息请求和响应模式以调用您。