HATEOAS 是什么

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 【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 起步依赖。

目录
相关文章
|
1月前
|
Kubernetes 测试技术 应用服务中间件
基于 Nginx Ingress + 云效 AppStack 实现灰度发布
本文将演示结合云效 AppStack,来看下如何在阿里云 ACK 集群上进行应用的 Ingress 灰度发布。
64900 19
|
1月前
|
机器学习/深度学习 分布式计算 数据处理
分布式计算框架:并行力量的交响乐章
分布式计算框架如Apache Spark解决单机计算挑战,通过拆分任务到多机并行处理提升效率。Spark以其内存计算加速处理,支持批处理、查询、流处理和机器学习。以下是一个PySpark统计日志中每日UV的示例,展示如何利用SparkContext、map和reduceByKey进行数据聚合分析。这些框架的运用,正改变大数据处理领域,推动数据分析和机器学习的边界。【6月更文挑战第18天】
94 2
|
1月前
|
消息中间件 运维 监控
ApsaraMQ Copilot for RocketMQ:消息数据集成链路的健康管家
阿里云消息队列 ApsaraMQ 始终围绕“高弹性低成本、更稳定更安全、智能化免运维”三大核心方向进行演进和拓展。在智能化免运维方面,通过 ApsaraMQ Copilot,为企业提供消息数据集成链路的健康管家,让消息服务走进智能化免运维的新时代。
71734 64
|
19天前
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
29291 12
|
1月前
|
安全 Java 编译器
Java 虚拟机加载 Java 类的过程
【6月更文挑战第7天】Java 是一门编译型语言,在完成代码的编写以后,需要使用 Java 编译器将源码编译成字节码文件,供虚拟机运行。在字节码被 Java 虚拟机执行之前,需要将对应的类进行加载。
51 3
|
1月前
|
弹性计算 运维 网络安全
上云“加速器”——基于云效流水线快速上线企业门户网站
阿里云提出使用云效将项目代码部署到ECS,快速构建企业门户网站。该方案融合云原生技术和持续交付,通过云效流水线简化从开发到部署的全过程,实现快速迭代。文章详细阐述了技术架构,包括客户端、云解析DNS、VPC、ECS等组件,以及部署流程,包括准备阶段、部署网站服务、解析域名和可选的静态资源加速。此外,还介绍了如何使用云效平台创建流水线,实现自动化构建与部署,以及如何通过一键部署简化流程。整个方案旨在降低运维成本,提高速度和灵活性,同时提供域名备案和SSL证书配置的指导。
194700 76
上云“加速器”——基于云效流水线快速上线企业门户网站
|
1月前
|
存储 运维 安全
Greenplum闭源?平滑迁移到 AnalyticDB 开启Data+AI新范式
知名开源 MPP 数据库 Greenplum 由于其丰富的企业级特性和出色的数据处理能力成为很多企业构建数仓的首选。近期 GP 公开 Github 仓库无法访问仅保留只读归档代码,业界纷纷猜测 GP 即将闭源。云原生数仓 AnalyticDB PostgreSQL 版完全掌控内核代码,完全兼容GP语法,全自研计算及存储引擎较比开源GP有五倍性能提升,全自研企业级特性在实时计算、弹性扩展、安全增强、高可用等方面实现对GP的全面超越,并在数仓能力上扩展了向量检索及一站式 RAG 服务,帮助企业快速构建 AI 应用、开启 Data+AI 新范式。
59002 3
|
1月前
|
SQL 存储 运维
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。由于内容丰富,本文中篇内容分享 Flink SQL 作业大状态导致反压的调优原理与方法。
69387 7
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
|
1月前
|
存储 监控 数据处理
Flink⼤状态作业调优实践指南:Datastream 作业篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。
56332 5
Flink⼤状态作业调优实践指南:Datastream 作业篇
|
1月前
|
监控 安全 Linux
/proc/cpuinfo 中的各个字段,都代表什么意思
`/proc/cpuinfo` 在 Linux 中显示 CPU 指令集信息,包括浮点运算、V86模式、调试、大页支持、时间戳计数器等。列表详细解释了各种 FLAG,如 FPU、VME、PSE、TSC 等,涉及处理器硬件功能和指令集。还包括多媒体扩展(MMX、SSE、SSE2)、超线程(HT)、虚拟化技术(VMX)、加密指令(AES)、高级向量扩展(AVX)等特性。