RESTful编程到底是什么?
当前回答
RESTful编程是关于:
资源由持久标识符标识:URI是当今普遍使用的标识符使用一组常见的动词来操纵资源:HTTP方法是常见的情况-古老的Create、Retrieve、Update、Delete变为POST、GET、PUT和Delete。但REST并不局限于HTTP,它只是目前最常用的传输。为资源检索的实际表示取决于请求,而不是标识符:使用Accept标头来控制是否需要XML、HTTP,甚至是表示资源的Java对象保持对象中的状态并在表示中表示状态在资源表示中表示资源之间的关系:对象之间的链接直接嵌入到表示中资源表示描述了如何使用表示,以及在什么情况下应该以一致的方式丢弃/重新处理表示:HTTP缓存控制头的使用
最后一个可能是REST的后果和整体有效性方面最重要的。总体而言,大多数RESTful讨论似乎都集中在HTTP及其在浏览器中的使用上。我知道R.Fielding在描述导致HTTP的架构和决策时创造了这个术语。他的论文更多的是关于资源的体系结构和缓存能力,而不是HTTP。
如果你真的对RESTful架构是什么以及它为什么工作感兴趣,请读几遍他的论文,并阅读整个内容,而不仅仅是第5章!接下来看看DNS为什么工作。阅读DNS的分级组织以及转介的工作原理。然后阅读并考虑DNS缓存的工作原理。最后,阅读HTTP规范(尤其是RFC2616和RFC3040),并考虑高速缓存的工作方式及其原因。最终,它只会咔嚓一声。当我看到DNS和HTTP之间的相似性时,我得到了最后的启示。在这之后,了解SOA和消息传递接口是可伸缩的就开始了。
我认为,要理解RESTful和SharedNothing架构的架构重要性和性能含义,最重要的技巧是避免被技术和实现细节所困扰。关注谁拥有资源,谁负责创建/维护资源等。然后思考表示、协议和技术。
其他回答
这在任何地方都很少被提及,但Richardson的成熟度模型是实际判断Restful是API的最佳方法之一。更多信息请点击此处:
理查德森成熟度模型
一本关于REST的好书是《实践中的REST》。
必须读取代表性状态传输(REST),并且REST API必须是超文本驱动的
有关RESTful服务的解释,请参见Martin Fowlers的文章《Richardson成熟度模型》(RMM)。
要实现RESTful,服务需要实现作为应用程序状态引擎的超媒体。(HATEOAS),也就是说,它需要达到RMM中的3级,阅读文章以了解详细信息或qcon演讲中的幻灯片。
HATEOAS约束是首字母缩略词超级媒体的引擎应用程序状态。这一原则是REST之间的关键区别以及大多数其他形式的客户端服务器系统...RESTful应用程序的客户端需要只知道要访问的单个固定URL所有未来的行动都应该可从中动态发现超媒体链接包含在资源的表示从该URL返回。标准化媒体类型也是预期任何人都能理解可能使用RESTful API的客户端。(来自免费百科全书维基百科)
Web框架的REST Litmus测试是Web框架的类似成熟度测试。
接近纯REST:学会爱HATEOAS是一个很好的链接集合。
针对公共云的REST与SOAP讨论了REST使用的当前级别。
REST和版本控制讨论了可扩展性、版本控制、可演化性等。通过可修改性
我想说,理解REST的一个重要组成部分在于端点或映射,例如/customers/{id}/balance。
您可以将这样的端点想象为从网站(前端)到数据库/服务器(后端)的连接管道。使用它们,前端可以执行在应用程序中任何REST映射的相应方法中定义的后端操作。
什么是REST?
用官方的话说,REST是一种基于使用当前“Web”基础的特定原则构建的架构风格。web有5个基本基础,可用于创建REST服务。
原则1:一切都是资源在REST体系结构风格中,数据和功能被视为资源,并使用统一资源标识符(URI)(通常是Web上的链接)进行访问。原则2:每个资源都由唯一标识符(URI)标识原则3:使用简单统一的接口原则4:通过代表进行沟通原则5:无状态
我看到了一堆回答,说将用户123的所有内容放在资源“/user/123”是RESTful的。
罗伊·菲尔丁(Roy Fielding)创造了这个术语,他表示RESTAPI必须是超文本驱动的。特别是,“REST API不能定义固定的资源名称或层次结构”。
因此,如果您的“/user/123”路径在客户端上被硬编码,那么它就不是真正的RESTful。很好地使用HTTP,也许,也许不是。但不是RESTful。它必须来自超文本。
推荐文章
- ReferenceError: description没有定义NodeJs
- REST API - dto还是不是?
- OData和REST web服务的区别
- Symfony 2.x中的所有东西都应该捆绑吗?
- 用Spring我可以做一个可选的路径变量吗?
- 什么是HTTP“主机”报头?
- 用Python构建最小的插件架构
- 哪个HTTP状态代码表示“尚未准备好,稍后再试”?
- Django REST框架:向ModelSerializer添加额外字段
- 如何阻止恶意代码欺骗“Origin”报头来利用CORS?
- 模式、表和数据库之间的区别是什么?
- 为什么说“HTTP是无状态协议”?
- 我需要HTTP GET请求的内容类型报头吗?
- REST和RPC之间的Web服务差异
- 单页应用:优点和缺点