RESTful编程到底是什么?
当前回答
一种称为REST(RepresentationalStateTransfer)的体系结构风格主张web应用程序应该像最初设想的那样使用HTTP。查找应使用GET请求。PUT、POST和DELETE请求应分别用于变异、创建和删除。
REST支持者倾向于使用URL,例如
http://myserver.com/catalog/item/1729
但REST架构不需要这些“漂亮的URL”。带有参数的GET请求
http://myserver.com/catalog?item=1729
完全是RESTful的。
请记住,GET请求不应用于更新信息。例如,向购物车添加项目的GET请求
http://myserver.com/addToCart?cart=314159&item=1729
这是不合适的。GET请求应该是幂等的。也就是说,发出两次请求与发出一次请求应该没有区别。这就是请求可缓存的原因。一个“添加到购物车”请求不是幂等的,发出两次请求会向购物车添加两个项目副本。POST请求显然适合于这种情况。因此,即使是RESTful web应用程序也需要共享POST请求。
这摘自大卫·M·Geary的优秀著作《核心JavaServer面孔》。
其他回答
这是一个令人惊讶的漫长的“讨论”,但至少可以说相当令人困惑。
IMO:
1) 没有一个大的酒吧和大量的啤酒,就没有一个安静的程序:)
2) 代表性状态转移(REST)是罗伊·菲尔丁(Roy Fielding)论文中提出的一种体系结构风格。它有许多限制。如果您的服务/客户尊重这些,那么它就是RESTful。就这样。
您可以(显著地)总结以下约束:
无状态通信遵守HTTP规范(如果使用HTTP)清晰传达传输的内容格式使用超媒体作为应用程序状态引擎
还有一个很好的帖子很好地解释了事情。
许多答案复制/粘贴了有效的信息,混淆了这些信息,增加了一些混乱。人们在这里谈论级别、RESTFulURI(没有这样的东西!)、应用HTTP方法GET、POST、PUT。。。REST不是关于这个或者不仅仅是关于这个。
例如,链接-有一个漂亮的API是很好的,但最终客户端/服务器并不真正关心你获得/发送的链接,重要的是内容。
最终,只要内容格式已知,任何RESTful客户端都应该能够使用任何RESTful服务。
这是一种编程,您的系统架构符合Roy Fielding在论文中提出的REST风格。由于这是描述网络的架构风格(或多或少),所以很多人都对它感兴趣。
另外一个答案是:没有。除非你是作为学术研究软件架构或设计web服务,否则真的没有理由听过这个词。
REST代表代表性状态转移。
它依赖于一个无状态的、客户端-服务器的、可缓存的通信协议——实际上在所有情况下都使用HTTP协议。
REST通常用于移动应用程序、社交网络网站、mashup工具和自动化业务流程。REST风格强调通过有限数量的操作(动词)来增强客户端和服务之间的交互。通过将资源(名词)分配给它们自己独特的通用资源指示符(URI)来提供灵活性。
休息介绍
REST==HTTP类比是不正确的,除非你不强调它“必须”是HATEOAS驱动的。
罗伊自己在这里清除了它。
输入REST API时,除了初始URI(书签)和适用于预期受众的一组标准化媒体类型(即,预期任何可能使用该API的客户端都能理解)之外,不应有任何先验知识。从那时起,所有应用程序状态转换都必须由客户端选择服务器提供的选择来驱动,这些选择出现在接收的表示中,或者由用户对这些表示的操作来暗示。转换可以由客户端对媒体类型和资源通信机制的知识来确定(或限制),这两者都可以动态地改进(例如,按需编码)。
[这里的失败意味着带外信息正在驱动交互,而不是超文本。]
REST是一种编写分布式应用程序的架构模式和风格。它不是狭义的编程风格。
说你使用REST风格类似于说你建造了一个特定风格的房子:例如都铎风格或维多利亚风格。REST作为一种软件风格,都铎或维多利亚风格作为一种家居风格,都可以通过构成它们的质量和约束来定义。例如,REST必须具有客户端-服务器分离,其中消息是自我描述的。都铎风格的房屋有重叠的山墙和屋顶,这些山墙和前面的山墙陡峭倾斜。您可以阅读Roy的论文,以了解更多关于构成REST的约束和质量的信息。
与家庭风格不同的REST在持续和实际应用中遇到了困难。这可能是故意的。将其实际实现留给设计者。所以你可以自由地做你想做的事情,只要你满足论文中提出的约束条件,你就可以创建REST系统。
奖金:
整个web都基于REST(或REST基于web)。因此,作为一名web开发人员,您可能需要意识到这一点,尽管编写好的web应用程序并不必要。
推荐文章
- 什么是“升级-不安全-请求”HTTP报头?
- HTTP 301和308状态码有什么区别?
- 跨REST微服务的事务?
- 什么HTTP状态码应该用于错误的输入
- 为什么Linux被称为单片内核?
- 你如何设计面向对象的项目?
- 编排microservices
- 如何使HTTP请求在PHP和不等待响应
- PATCH和PUT请求的主要区别是什么?
- 调用webrequest, POST参数
- 我可以把我所有的http://链接都改成//吗?
- URL为AJAX请求编码一个jQuery字符串
- 编译System.Net.HttpClient的查询字符串
- 如何在PostgreSQL中查看视图的CREATE VIEW代码?
- 摘要认证和基本认证的区别是什么?