HATEOAS 是什么

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【6月更文挑战第9天】RESTful 系统设计中有一个重要的特性,就是 **用超媒体驱动应用状态(Hypermedia as the engine of application state)**,也就是 HATEOAS

随着 RESTful API 被越来越多地人接受,它已经被非常广泛地使用,并且,在日常开发中,大部分开发者写的 API 也越来越符合 RESTful 的规范。RESTful 系统设计中有一个重要的特性,就是 用超媒体驱动应用状态(Hypermedia as the engine of application state),也就是 HATEOAS

先来通俗地介绍一下 HATEOAS。

通常我们开发 RESTful API 为时提供接口服务时,会有一份前后端对接的文档,这个文档里包含了每一个接口的请求地址、参数、响应内容等信息,虽然我们会对这些接口根据业务模块进行分类或者分组,但其实,每一个接口都是独立的,他们之间没有关系。这是不采用 HATEOAS 的接口开发方式。

与之相比,HATEOAS 可以类比我们日常浏览网页。比如,我们日常浏览掘金网站的时候,并不需要分别记住首页、文章列表、沸点、个人主页等功能页面的地址,而是,进入首页(或者任何一个页面)后,可以通过超链接的方式,进入任何与当前页面相关的页面。包含 HATEOAS 特性的 RESTful API 与之类似,就是在相应结果中,包含了与当前内容相关的接口的地址。这样,我们只需要知道一个「根接口」的地址,就可以像浏览一个网站一样,得到所有 API 的请求地址。

据一个例子,以下是一个请求的响应 JSON:

{
   
  "bookId": 1,
  "bookName": "一本简单的书",
  "author": "张三",
  "links": [
    {
   
      "rel": "self",
      "type": "get",
      "href": "http://xxx.com/books/1"
    },
    {
   
      "rel": "collection",
      "type": "get",
      "href": "http://xxx.com/books"
    }
  ]
}

其中的 links 字段,就是相应结果中包含的相关接口的请求地址(href)、请求方法(type)、类型(collection),类型中,rel 值为 self 的一个,就是当前接口。

在相关的标准中,常用的 rel 的值还包括edit、search、related、first、last、previous、next等,从这些值的名称中,你就可以知道它们指代的意思。

这样做的好处正如前文中举的例子那样,只要知道了一个初始的 API 资源地址,就能动态地发现与之相关的资源和可用的操作,API 接口之间就像网页与网页之间一样,通过超链接的方式连接了起来。而客户端无需使用硬编码的方式来保存每个接口的地址,只需要业务流程中涉及的每一个步骤就可以了。

在服务端开发中,很多用来开发 REST 服务的框架,也提供了 HATEOAS 相关的特性,比如在 Spring Boot 中,可以使用 spring-boot-starter-hateoas 起步依赖。

目录
相关文章
|
5天前
|
Kubernetes 测试技术 应用服务中间件
基于 Nginx Ingress + 云效 AppStack 实现灰度发布
本文将演示结合云效 AppStack,来看下如何在阿里云 ACK 集群上进行应用的 Ingress 灰度发布。
64323 10
|
14天前
|
消息中间件 运维 监控
ApsaraMQ Copilot for RocketMQ:消息数据集成链路的健康管家
阿里云消息队列 ApsaraMQ 始终围绕“高弹性低成本、更稳定更安全、智能化免运维”三大核心方向进行演进和拓展。在智能化免运维方面,通过 ApsaraMQ Copilot,为企业提供消息数据集成链路的健康管家,让消息服务走进智能化免运维的新时代。
71585 62
|
7天前
|
安全 Java 编译器
Java 虚拟机加载 Java 类的过程
【6月更文挑战第7天】Java 是一门编译型语言,在完成代码的编写以后,需要使用 Java 编译器将源码编译成字节码文件,供虚拟机运行。在字节码被 Java 虚拟机执行之前,需要将对应的类进行加载。
36 3
|
11天前
|
存储 运维 安全
Greenplum闭源?平滑迁移到 AnalyticDB 开启Data+AI新范式
知名开源 MPP 数据库 Greenplum 由于其丰富的企业级特性和出色的数据处理能力成为很多企业构建数仓的首选。近期 GP 公开 Github 仓库无法访问仅保留只读归档代码,业界纷纷猜测 GP 即将闭源。云原生数仓 AnalyticDB PostgreSQL 版完全掌控内核代码,完全兼容GP语法,全自研计算及存储引擎较比开源GP有五倍性能提升,全自研企业级特性在实时计算、弹性扩展、安全增强、高可用等方面实现对GP的全面超越,并在数仓能力上扩展了向量检索及一站式 RAG 服务,帮助企业快速构建 AI 应用、开启 Data+AI 新范式。
58869 3
|
18天前
|
人工智能 开发者
6月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区6月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
696 66
|
4天前
|
弹性计算 运维 网络安全
上云“加速器”——基于云效流水线快速上线企业门户网站
阿里云提出使用云效将项目代码部署到ECS,快速构建企业门户网站。该方案融合云原生技术和持续交付,通过云效流水线简化从开发到部署的全过程,实现快速迭代。文章详细阐述了技术架构,包括客户端、云解析DNS、VPC、ECS等组件,以及部署流程,包括准备阶段、部署网站服务、解析域名和可选的静态资源加速。此外,还介绍了如何使用云效平台创建流水线,实现自动化构建与部署,以及如何通过一键部署简化流程。整个方案旨在降低运维成本,提高速度和灵活性,同时提供域名备案和SSL证书配置的指导。
104765 63
上云“加速器”——基于云效流水线快速上线企业门户网站
|
4天前
|
安全 Java 程序员
Java 中的 Stack 好纠结~
【6月更文挑战第10天】栈是每一个程序员都很熟悉的数据结构,英文叫做 Stack,在 Java 中,栈的实现类是 java.util.Stack。如果你了解 Java 中的 Stack 类,就会知道,这里有一个历史遗留问题。
62 1
|
15天前
|
存储 监控 数据处理
Flink⼤状态作业调优实践指南:Datastream 作业篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。
55917 5
Flink⼤状态作业调优实践指南:Datastream 作业篇
|
11天前
|
前端开发 Java Spring
自定义 Spring MVC Controller 方法参数处理
【6月更文挑战第3天】在 Spring MVC Controller 的方法参数,Spring 会自动为我们注入一些特殊的参数值,比如 HttpServletRequest、HttpServletResponse 等对象,或者 HTTP 请求参数。
51 0
|
12天前
|
安全 Java 机器人
给 Spring Security 表单增加图形验证码
【6月更文挑战第2天】针对给 Spring Security 增加验证码登录的情况,介绍如何给 Spring Security 的登录表单增加图形验证码的校验。
51 2