restful rest

在这篇文章中,我们将介绍有关HATEOAS的RESTful服务的综合文章。 REST:刷新器。

1.简介

“不好了! 请,不要再发表有关REST的文章!” 你们中的许多人可能会尖叫,这是正确的。 已经出版了太多的教程,帖子,讨论和最佳实践,而再提出一个几乎没有任何意义。

坦白地说,对REST的理解因人而异。 并非每个人都有时间(也有愿望)阅读Roy Fielding优秀论文的“ 代表性状态转移”(REST)一章,因此,对于许多REST而言 ,无论其含义如何,它基本上都是基于HTTP的API的代名词。 但是, REST的一面大部分时间都处于黑暗中,毫无根据地被遗忘和忽略: 超媒体 。

目录

1.简介 2. REST体系结构约束 3. REST!=通过HTTP进行RPC 4.巨大的困惑:RESTful与REST 5.理查森成熟度模型 6。结论 7.接下来

那么,这本书的背后的想法是什么? 本教程的唯一目的是重温根源,重新考虑遵循REST体系结构样式设计和实现Web API的含义,以及如何在Java服务和应用程序中或通常在JVM平台上实际实现Web API。 。

2. REST体系结构约束

代表性状态转移 (或简称REST )不是规范,而是体系结构样式,指导分布式软件系统设计的一组原则和约束。 按照REST架构风格设计的系统必须符合五个强制性(和一个可选性)约束。 让我们简要浏览一下它们。

  • 客户端服务器
    在微服务时代,这听起来很明显。 但是,只是为了重申这一基本原理,客户端和服务器是相互分离的。 这样,每一方都有能力和机会独立发展。
  • 无状态
    客户端和服务器之间的通信应该是无状态的。 实际上,这意味着从客户端到服务器的每个请求都必须包含处理该请求所需的所有信息。 服务器不应存储任何与会话相关的状态或上下文,因此客户端是负责管理该状态或上下文的服务器。 通常将这一原理作为构建可靠的和水平可伸缩系统的必要先决条件。
  • 快取
    服务器必须能够向客户端提示响应中的数据是否可以缓存。 高效的缓存实现可以减少服务器的不必要负担,提高整体可伸缩性,并显着减少网络交互的延迟。
  • 分层系统
    这又一个基本原则主张将体系结构设计为由层次结构层组成。 在客户端/服务器通信方面,客户端无法确定它是直接连接到服务器还是通过任何中介连接(首先想到的这种中介是负载均衡器)。
  • 统一界面
    在我们的讨论中,这可能是最重要的体系结构原理,它强调组件之间存在统一接口。 反过来,它概述了此类接口应遵循的五个约束:

    • 资源识别
  • 按需编码(可选)
    此可选约束建议可以通过从服务器下载并执行一些代码来扩展客户端功能。

为了进一步加强它, REST为架构师和系统设计了一套原则和约束,但这绝不是实现。

3. REST!=通过HTTP进行RPC

REST体系结构样式不会将客户端/服务器通信限制为特定协议。 但是,如今,它主要用于构建通过HTTP ( Web协议)进行通信的Web API和服务。

在这种情况下,使用URL标识各个资源。 JSON或XML是表示资源的两种主要格式,而客户端可以使用适当的HTTP动词来操纵资源。 坦白地说,大多数Web API设计人员和实施人员就此止步,根本没有提及HATEOAS 。 所有这些人是否会误解REST的含义? 罗伊·菲尔丁 ( Roy Fielding)在他的一条推文中很好地总结了这一点:

我不同意这个术语的流行理解是不同的。 不同的是某些公司,作者和发言人希望在知道仅是HTTP时说REST; 不是因为他们不知道该术语的含义,而是因为$$$ >>的含义。

https://twitter.com/fielding/status/1108092713516163072?lang=zh-CN

它总结了业界对REST体系结构样式采用的悲观状态。 是的,它似乎无处不在,但是不幸的是,大多数Web应用程序使用RPC样式而不是遵循REST明确定义的约束(尤其是统一接口 )通过HTTP在HTTP上公开了这些API和服务。

这是为什么? 可能的部分原因是, REST体系结构样式提到了超媒体和HATEOAS,但并未真正说明必须完成的精确度(考虑了客户端和服务器之间可能发生的所有复杂交互)。

在某种程度上,人们误解了REST,因为我没有在论文中包含关于媒体类型设计的足够细节。 那是因为我没时间了,不是因为我认为它比REST的其他方面都重要。

https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-724

同样,对于许多人来说,不仅要设计资源命名,表示,语义和操作,而且还要设计状态转换(甚至不涉及测试所有主题),似乎是一笔不小的开销。

但是,我认为大多数人都犯了一个错误:设计简单的东西应该很简单。 实际上,设计某些东西所需的工作与结果的简单程度成反比。 随着建筑风格的发展,REST非常简单。

https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-724

我认为遵循REST架构风格值得付出努力。 是的,您可能不知所措。 是的,由于不适合您的编程语言或平台的工具和库,您可能会面临很多挑战,尤其是在超媒体方面 。 另一方面,您最终将获得描述性强,易于理解和可维护的Web服务和API。

在输入REST API之前,除了初始URI (书签)和适用于目标受众的标准媒体类型集(即,期望使用该API的任何客户端可以理解的标准媒体类型)外,都应该没有其他知识。 从那时起,所有应用程序状态转换都必须由客户端选择服务器提供的选择来驱动,这些选择出现在接收到的表示中或由用户对这些表示的操纵来暗示。 过渡可以由客户端对媒体类型和资源通信机制的了解来确定(或受其限制),这两者都可以动态地(例如,按需编码)进行改进。

https://roy.gbiv.com/untangled/2008/rest-apis-must-be-超文本驱动

希望在本教程的过程中,我们将揭穿一些神话,并以实际方式证明HATEOAS支持的Web服务和API是可行的,而且并不难。

4.巨大的困惑:RESTful与REST

由于许多组织和个人正在使用自己对REST的解释来构建Web服务和API,因此导致人们对哪种应用程序和系统实际上遵循REST体系结构风格感到困惑。 为了使这种区别显而易见, RESTful这个术语诞生了。

遵守REST体系结构约束的 Web服务API称为RESTful API。

https://zh.wikipedia.org/wiki/Representational_state_transfer

本质上,此定义没有余地:满足所有必需的约束 ,或者请不要将您的API称为RESTful 。 毫不奇怪, 罗伊·菲尔丁 ( Roy Fielding)对这件事有更严格的意见。

要使REST体系结构风格清晰地认识到超文本是一种约束,需要采取什么措施? 换句话说,如果应用程序状态的引擎(以及API)不是由超文本驱动的,则它不能是RESTful的 ,也不能是REST API。 期。 是否有一些需要修复的故障手册?

https://roy.gbiv.com/untangled/2008/rest-apis-must-be-超文本驱动

本教程的目的是展示HATEOAS是头等公民的RESTful API设计以及所有其他必需的约束。 不,我们不会将REST视为宗教,而是要证明每个元素都很重要而且存在是有原因的。

5.理查森成熟度模型

REST保护下的Web服务和API的碎片要求采取行动。 作为响应, 伦纳德·理查森 ( Leonard Richardson)开发了API成熟度模型(通常简称为Richardson成熟度模型 ),该模型实质上定义了4个级别的API成熟度。

理查森API成熟度模型

这个非常简单的模型有助于轻松地确定特定Web API在实现RESTful方面所处的位置(请注意,每个级别都基于其下一个级别)。 您可能还会注意到,该模型并非普遍适用,而是明确关注基于HTTP协议的REST (我们记得, REST体系结构风格与基础网络协议无关)。

  • 0级– POX沼泽
    最底层是使用HTTP协议进行远程交互以隧道请求和响应的Web API。 通常,他们使用单个HTTP方法(通常是POST )并公开单个API入口点。 这是典型的RPC over HTTP样式。
  • 级别1 –资源
    稍微成熟一些,我们会遇到一些Web API,这些API公开了多个入口点,或者遵循REST命名法提供了单独的资源。 当然可以,但是这些API仍使用单个HTTP方法(通常是POST )。
  • 2级– HTTP动词
    为了更进一步地遵守RESTful原则,此级别的Web API使用HTTP谓词语义来区分各个资源上的不同动作。 这是大多数现代Web API最终达到的级别,声称“足够好”。
  • 3级–超媒体控件
    在最顶层,我们遇到了使用HATEOAS和超媒体控件来引导客户端/服务器交互的Web API。 在此级别上,API可以称为真正的RESTful 。

有了这个成熟度模型,每当您听到“……在我们组织中,我们构建暴露REST Web API的应用程序……”时,我们很可能在谈论Level 2

6. RESTful服务–结论

在本教程的介绍性部分中,我们更新了对REST体系结构样式的了解,尤其是重新介绍了其强制性原则和约束。 我们还揭开了RESTful一词的起源以及它如何应用于现代Web API和服务的神秘感。 再一次, 罗伊·菲尔丁 ( Roy Fielding)将其牢牢地钉牢了。

通过包含超文本的自描述消息的统一接口提供基于网络的资源访问的API,该消息包含超文本以指示潜在的状态转换,它可能是RESTful应用程序的整个系统的一部分

https://twitter.com/fielding/status/1125438763507654658

在本教程的后续部分中,我们将大部分时间花在谈论HATEOAS上 ,这可能是所有声称被称为真正的RESTful的 API中最困难但也是功​​能最强大的元素。

7.接下来

在本教程的下一部分中,我们将开始讨论使用HATEOAS功能丰富您的Web服务和API的多种方法。

翻译自: https://www.javacodegeeks.com/restful-services-with-hateoas-rest-the-refresher.html

restful rest

restful rest_HATEOAS的RESTful服务。 REST:刷新器相关推荐

  1. restful rest_HATEOAS的RESTful服务。 超媒体:REST的秘密要素

    restful rest 在这篇文章中,我们将介绍有关HATEOAS的RESTful服务的综合文章. 超媒体是REST的秘密成分. 1.简介 在本教程的前一部分中,我们花了一些时间来刷新有关REST体 ...

  2. 在 Docker 上运行一个 RESTful 风格的微服务

    tags: Microservice Restful Docker Author: Andy Ai Weibo: NinetyH GitHub: https://github.com/aiyanbo/ ...

  3. restful json_Dropwizard:轻松的RESTful JSON HTTP Web服务

    restful json 寻求快速, 轻松地创建可用于生产环境的RESTful JSON HTTP Web服务的Java开发人员应考虑使用Dropwizard框架. Dropwizard汇集了相互补充 ...

  4. Dropwizard:轻松的RESTful JSON HTTP Web服务

    寻求快速, 轻松地创建可用于生产环境的RESTful JSON HTTP Web服务的Java开发人员应该考虑Dropwizard框架. Dropwizard汇集了相互补充的广受好评的库,因此您可以了 ...

  5. CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  6. 编程打开Windows服务控制管理器

    假设要自己编程来加载Windows下后缀为.sys的驱动程序:首先要使用 OpenSCManager 函数打开Windows服务控制管理器: 下面先来调用此函数看一下会不会打开成功:代码如下: #in ...

  7. cuda编程_CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  8. 最新版gg服务器框架安装器,GG服务框架安装器最新版本

    GG服务框架安装器最新版本是一款非常实用的谷歌框架修复软件.这里支持的手机型号是非常多样的,常见的都是可以支持的,而且还可以为用户提供超多的修复功能,还有人工客服为用户24小时服务.如果你有心动了的话 ...

  9. android服务框架下载,GG服务框架安装器

    GG服务框架安装器是一款谷歌四件套的下载软件.无需root就能一件修复谷歌框架中的谷歌四件套了.当然你也能轻松下载4件套.这款软件最大的亮点就是修复游戏闪退.还有24小时的人工服务,手把手教你GG服务 ...

最新文章

  1. 没想到,他面试竟然挂在了Spring的这个点上...
  2. 删除链表的倒数第n个节点 python_19.leetcode题目讲解(Python):删除链表的倒数第N个节点...
  3. python恶搞表情包-Python自动生成表情包,python在手,从此斗图无敌手
  4. java apt anno_Android Studio中使用apt
  5. 详解log4j2(下) - 按日志级别区分文件输出
  6. 案例篇-HBase RowKey 设计指南
  7. 割点和桥算法——摘自《算法艺术与信息学竞赛》
  8. 什么是MircoPython?
  9. Thymeleaf本页面通过controller跳转到本页面的坑
  10. Markdow简单介绍
  11. 基于mx27ads 的yaffs 文件系统释疑
  12. 1.4_12 Axure RP 9 for mac 高保真原型图 - 案例11 【动态面板-滚动条1】
  13. 一次使用针式打印机打印异常问题的处理
  14. 为什么程序猿 996 会猝死,而企业家 007 却不会?
  15. 广工anyview数据结构第七章(2021.12)
  16. BlackBerry手机应用上网的通道列表
  17. 七、常用类(高琪java300集+java从入门到精通笔记)
  18. Windows系统近年漏洞概况及攻击教程防御
  19. 【计算机网络实验】笔记(实验一、二)
  20. c语言驱动显卡,佳能 Tesla C2050 驱动程序下载-更新佳能软件(显卡)

热门文章

  1. Acwing 217. 绿豆蛙的归宿
  2. 牛客题霸 [子数组最大乘积] C++题解/答案
  3. [TJOI2012] 旅游(树的直径)
  4. 「ROI 2017 Day 2」反物质(单调队列优化dp)
  5. P6620 [省选联考 2020 A 卷] 组合数问题(斯特林数、下降幂)
  6. CF1556D-Take a Guess【交互】
  7. P4258-[WC2016]挑战NPC【带花树】
  8. P5934-[清华集训2012]最小生成树【最小割】
  9. P2150-[NOI2015]寿司晚宴【dp】
  10. P3349-[ZJOI2016]小星星【树形dp,容斥】