restful rest_HATEOAS的RESTful服务。 REST:刷新器

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成熟度。

RESTful服务-Richardson 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unicode® Character Name Index

【0】README 0.1) there are unicodes for varients of alphabet a, for that of b, c, or d and so on, please visit http://unicode.org/charts/charindex.html [A] A WITH ACUTE, LATIN CAPITAL LETTER 00C1 A WITH ACUTE, LATIN SMALL LETTER 00E1 A WITH…

java8 hash算法

一、hash算法哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同…

exchanger_如何通过示例在Java中使用Exchanger

exchanger大家好,如果您在并发Java应用程序中工作,那么您可能听说过java.util.concurrent包的Exchanger类。 Java中的Exchanger是Java 1.5中与CountDownLatch , CyclicBarrier和Semaphores一起引入的另一个并发或同步实用程序。 顾名思义&…

Java Enumeration接口与Iterator接口

一、Enumeration接口 Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。 这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现在代码中已经被很少使用了。尽管如此&a…

java国际化——日期和时间+排序

【0】README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java国际化——日期和时间排序 的基础知识 ; 【1】日期和时间 1)当格式化日期和时间时,需要考虑4个与 Locale …

jvm 垃圾收集算法_JVM垃圾收集和优化

jvm 垃圾收集算法总览 在对系统进行性能相关问题的故障排除时,内存优化是一个需要深入分析每个系统在内存中存储的内容,存储时间和访问方式的场所。 这篇文章是要对背景信息进行注释,并在此工作中要注意一些要点,这些工作要针对基…

数据库SQL索引

一、索引的意义 表中创建索引,以便更加快速高效地查询数据。 用户无法看到索引,它们只能被用来加速搜索/查询。 注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此&#x…

java国际化——消息格式化+文本文件和字符集

【0】README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java国际化——消息格式化文本文件和字符集 的基础知识 ; 2) 由于本文涉及到的源代码都比较简单,所以直接将全…

java 8 新功能详解_Java 8和Java 14之间的新功能

java 8 新功能详解从版本9开始,Java每6个月就有一次新功能,因此很难跟踪这些新更改。 互联网上的大多数信息都描述了最近2个Java版本之间的变化。 但是,如果您的情况与我相似,则说明您使用的不是Java的最新版本,而是使…

Tomcat配置虚拟内存

一、Tomcat启动参数JAVA_OPTS参数说明   -server 启用jdk 的 server 版;   -Xms java 虚拟机初始化时的堆最小内存;   -Xmx java 虚拟机可使用堆的最大内存;   -XX: PermSize 非堆内存永久保留区域   -XX:MaxPermS…

ISO语言代码和国家代码+Locale常量+ISO货币符号

【1】ISO语言代码和国家代码 【2】Locale常量 【3】ISO货币符号

djl和ljl_使用Spring Boot和DJL进行深度学习

djl和ljl总览 这是Spring Boot上的另一篇文章 ,该文章将展示如何使用Deep Java Library (DJL)构建示例Web应用程序, Deep Java Library (DJL)是Java的开源深度学习库,用于诊断X射线图像上的COVI…

java BigDecimal八种舍入模式

一、BigDecimal介绍java.math.BigDecimal不可变的immutable、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成。标度(scale)如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以10的…

java国际化——资源包

【0】README 1) 本文部分文字描述转自 core java volume 2 , 旨在理解 java国际化——资源包 的基础知识 ; 2) 本文源代码idea 转自: (利用properties 文件进行国际化)https://docs.oracle.co…

ui自动化测试测试报告_您需要了解的有关UI测试的所有信息

ui自动化测试测试报告让我们从一个问题开始。 用户在网站上进行互动的第一件事是什么? 接口,当然。 网站的外观是在用户身上产生“第一印象”的第一件事。 交互式Web应用程序可以为用户带来成败,这就是为什么越来越多的人选择对其Web应用程序…

Tomcat解决HTTP GET中文乱码

一、中文乱码原因 Tomcat默认是按ISO-8859-1进行URL解码,ISO-8859-1并未包括中文字符,中文字符不能被正确解析了。 二、配置编码 在tomcat的conf/server.xml下的connetor属性中增加URIEncoding或者useBodyEncodingForURI属性 (1&#xff0…

NanoHTTPD web server的一个简单荔枝

【0】README 0.1)本文旨在演示一个简单荔枝,以说明如何使用 NanoHTTPD web server 和 浏览器访问 该server的效果 -------------------------------------------------------------- App.java public class App extends NanoHTTPD {public App() thr…

throwable_您想了解的所有Throwable

throwable本文是有关异常的教程。 但不是通常的一种。 其中有许多内容可以告诉您异常的含义,如何抛出异常,捕获异常,已检查异常和运行时异常之间的区别,等等。 没有必要了。 这对您来说也很无聊。 如果没有,那么请阅读…

Linux Tomcat安装

一、linux 安装软件的步骤 (1)下载软件的压缩包 (2)解压到指定的目录 (3)配置环境变量 ,配置PATH(在任意目录启动,这PATH可以省略,若不配置只有安装目录才…

java分布式对象(RMI+部署使用RMI的程序)

【0】README 1)本文文字转自 core java volume 2, 旨在学习 java 分布式对象的相关知识; 2) RMI 的实例程序为原创; 3) RMI部署步骤的测试用例,参见 http://blog.csdn.net/pacosonswjtu/arti…