RESTful编程到底是什么?
当前回答
为了在这里贡献一些新的东西,我想分享我文章中的链接,即通过一种实用和客观的方法将REST概念化。
我将介绍以下主要概念:
HATEOAS-超媒体作为应用程序状态的引擎,资源和表示,可寻址性,REST中的幂等性,Richardson的REST成熟度模型。媒体类型API版本控制
我还创建了一个GitHub项目,您可以使用docker轻松运行,它涵盖了我在本文中介绍的内容。
https://itnext.io/how-to-build-a-restful-api-a-deep-dive-into-rest-apis-215188f80854
其他回答
这是一个令人惊讶的漫长的“讨论”,但至少可以说相当令人困惑。
IMO:
1) 没有一个大的酒吧和大量的啤酒,就没有一个安静的程序:)
2) 代表性状态转移(REST)是罗伊·菲尔丁(Roy Fielding)论文中提出的一种体系结构风格。它有许多限制。如果您的服务/客户尊重这些,那么它就是RESTful。就这样。
您可以(显著地)总结以下约束:
无状态通信遵守HTTP规范(如果使用HTTP)清晰传达传输的内容格式使用超媒体作为应用程序状态引擎
还有一个很好的帖子很好地解释了事情。
许多答案复制/粘贴了有效的信息,混淆了这些信息,增加了一些混乱。人们在这里谈论级别、RESTFulURI(没有这样的东西!)、应用HTTP方法GET、POST、PUT。。。REST不是关于这个或者不仅仅是关于这个。
例如,链接-有一个漂亮的API是很好的,但最终客户端/服务器并不真正关心你获得/发送的链接,重要的是内容。
最终,只要内容格式已知,任何RESTful客户端都应该能够使用任何RESTful服务。
我认为restful的要点是将状态分离到更高的层,同时将互联网(协议)用作无状态传输层。大多数其他方法都会混淆。
这是处理互联网时代编程的根本变化的最佳实用方法。关于根本性的变化,Erik Meijer在这里就表演进行了讨论:http://www.infoq.com/interviews/erik-meijer-programming-language-design-effects-purity#view_93197 . 他将其概括为五种效果,并通过将解决方案设计成编程语言来提出解决方案。该解决方案也可以在平台或系统级别实现,无论使用何种语言。restful可以被视为在当前实践中非常成功的解决方案之一。
使用restful风格,您可以在不可靠的互联网上获取和操纵应用程序的状态。如果当前操作无法获得正确的当前状态,则需要零验证原则来帮助应用程序继续。如果它无法操纵状态,它通常使用多个确认阶段来保持正确。从这个意义上讲,rest本身并不是一个完整的解决方案,它需要web应用程序堆栈的其他部分中的功能来支持其工作。
鉴于这个观点,rest风格并没有真正与互联网或web应用程序绑定。这是许多编程情况的基本解决方案。它也不简单,它只是让界面变得非常简单,并且可以很好地处理其他技术。
只有我的2厘米。
编辑:两个更重要的方面:
无国籍是一种误导。它与restful API有关,而不是应用程序或系统。系统需要有状态。Restful设计是基于无状态API设计有状态系统。另一位QA的一些引用:REST对资源表示进行操作,每个资源表示由URL标识。这些通常不是数据对象,而是复杂的对象抽象。REST代表“代表性状态转移”,这意味着它是关于通信和修改系统中某些资源的状态的。幂等性:REST中一个经常被忽视的部分是大多数动词的幂等性。这导致了健壮的系统和语义精确解释之间的相互依赖性降低。
为了在这里贡献一些新的东西,我想分享我文章中的链接,即通过一种实用和客观的方法将REST概念化。
我将介绍以下主要概念:
HATEOAS-超媒体作为应用程序状态的引擎,资源和表示,可寻址性,REST中的幂等性,Richardson的REST成熟度模型。媒体类型API版本控制
我还创建了一个GitHub项目,您可以使用docker轻松运行,它涵盖了我在本文中介绍的内容。
https://itnext.io/how-to-build-a-restful-api-a-deep-dive-into-rest-apis-215188f80854
我看到了一堆回答,说将用户123的所有内容放在资源“/user/123”是RESTful的。
罗伊·菲尔丁(Roy Fielding)创造了这个术语,他表示RESTAPI必须是超文本驱动的。特别是,“REST API不能定义固定的资源名称或层次结构”。
因此,如果您的“/user/123”路径在客户端上被硬编码,那么它就不是真正的RESTful。很好地使用HTTP,也许,也许不是。但不是RESTful。它必须来自超文本。
REST代表代表性状态转移。
它依赖于一个无状态的、客户端-服务器的、可缓存的通信协议——实际上在所有情况下都使用HTTP协议。
REST通常用于移动应用程序、社交网络网站、mashup工具和自动化业务流程。REST风格强调通过有限数量的操作(动词)来增强客户端和服务之间的交互。通过将资源(名词)分配给它们自己独特的通用资源指示符(URI)来提供灵活性。
休息介绍
推荐文章
- 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服务差异
- 单页应用:优点和缺点