关于 REST API 六大指导原则,你了解多少?

news2025/1/31 11:18:12

背景

在前一篇文章中
关于 REST API,你了解多少?
,我们聊到了 REST 六大指导原则,有些原则不太容易理解,这次我们详细说明一下。
1. 统一接口(Uniform Interface):定义了一组通用的接口约束,包括资源的标识、资源的操作和资源的表示。这样可以使不同的组件之间更加松耦合,提高系统的可扩展性和可维护性。

  1. 客户端-服务器(Client-Server):将应用程序分为客户端和服务器两个部分,它们之间通过接口进行通信。这种分离可以提高系统的可扩展性和简化组件的开发。

  2. 无状态(Stateless):无状态性要求从客户端到服务器的每个请求都必须包含理解和完成请求所需的所有信息。
    服务器无法利用服务器上任何先前存储的上下文信息。因此,客户端应用程序必须完全保留会话状态。服务器不会保存客户端的状态信息,每个请求都是独立的。这样可以减少服务器的负担,提高系统的可伸缩性。

  3. 缓存(Cache):客户端可以缓存服务器的响应,以减少网络传输和提高性能。服务器可以通过设置响应头来控制缓存的行为。

  4. 分层系统(Layered System):将系统分为多个层次,每个层次都有特定的功能和责任。这样可以提高系统的可扩展性和安全性。例如常见的 MVC

  5. 按需代码(Code on Demand):服务器可以向客户端传输可执行代码,以扩展客户端的功能。这种方式在 REST 中并不是必须的,但是它可以提高系统的灵活性和可扩展性。

其中就 Uniform Interface 不太好理解,我们重点看一下:

Uniform Interface

在REST架构中,Uniform Interface是其中一个重要的约束条件,它要求在客户端和服务器之间的交互中使用统一的接口。这个接口应该是简单、通用、标准化的,以便于不同的客户端和服务器之间进行交互。

Uniform Interface的设计目标是将客户端和服务器解耦,使得它们可以独立地演化。客户端和服务器之间的通信只依赖于接口的定义,而不依赖于具体的实现细节。这样,当服务器的实现发生变化时,客户端不需要做出任何修改,只需要遵循同样的接口即可。

Uniform Interface包括以下四个约束条件:

  1. 资源标识符(Resource Identification):每个资源都应该有一个唯一的标识符,通常使用URI来标识资源。

  2. 操作资源的表现形式来实现对资源的操作(Manipulation of resources through representations"):资源在服务器响应中应具有统一的表示形式。 API 使用者应该使用这些表示来修改服务器中的资源状态。
    “Manipulation of resources through representations” 是 REST 架构风格的一个关键概念,它指的是客户端通过操作资源的表现形式来实现对资源的操作。
    在 REST 中,资源是指网络上的任何东西,比如文本、图片、视频、数据库记录等等。每个资源都有一个唯一的标识符(URI),客户端可以通过这个标识符来访问资源。而资源的表现形式则是指资源的具体表现形式,比如文本可以是 HTML、XML、JSON 等格式,图片可以是 JPEG、PNG 等格式。客户端可以通过请求不同的表现形式来获取资源的不同表现形式。
    在 REST 中,客户端通过对资源的表现形式进行操作来实现对资源的操作。比如,客户端可以通过 POST 请求来创建一个新的资源,请求的数据就是新资源的表现形式;通过 PUT 请求来更新一个资源,请求的数据也是资源的表现形式;通过 DELETE 请求来删除一个资源,请求的 URI 就是要删除的资源的标识符( 这个比如,不是特别的贴切 )。
    因此,“Manipulation of resources through representations” 的含义就是客户端通过操作资源的表现形式来实现对资源的操作。这种方式使得客户端和服务器之间的通信更加灵活和可扩展。

  3. 自描述消息(Self-descriptive Messages):每个资源应该携带足够的信息来描述如何处理消息。它还应该提供客户端可以对资源执行的附加操作的信息。
    消息应该包含一个类型,以指示消息的格式和语法。这使得客户端可以根据类型来解析消息,并采取适当的行动。比如 HTTP 中的 content-type

  4. 超媒体作为应用程序状态的引擎(Hypermedia as the Engine of Application State):客户端应该只有应用程序的初始 URI。客户端应用程序应使用超链接动态驱动所有其他资源和交互。
    具体来说,HATEOAS 原则要求 RESTful API 返回的响应中包含超媒体链接,这些链接描述了客户端可以采取的下一步操作。这些链接可以是任何类型的链接,例如 URL、表单、控件、status_code等,它们描述了客户端可以采取的操作以及如何执行这些操作。
    通过使用 HATEOAS,RESTful API 可以将应用程序状态的控制权交给客户端,而不是服务器。这意味着客户端可以根据服务器返回的超媒体链接来决定下一步要采取的操作,而无需事先了解服务器的 API 或其他约定。这种方式可以使客户端和服务器之间的耦合更加松散,从而提高系统的可重用性和可扩展性。

总结

简而言之,在 REST 架构风格中,数据和功能被视为资源,并使用统一资源标识符 (URI) 进行访问。
通过使用一组简单、定义明确的操作来对资源进行操作。 此外,资源必须与其表示形式分离,以便客户端可以访问各种格式的内容,例如 HTML、XML、纯文本、PDF、JPEG、JSON 等。客户端和服务器通过使用标准化的接口和协议来交换资源的表示。 通常 HTTP 是最常用的协议,但 REST 并不强制要求它。最重要的是,与服务器的每次交互都必须是无状态的。
所有这些原则都有助于 RESTful 应用程序变得简单、轻量级和快速。

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

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

相关文章

Error relaunching VirtualBox VM process:5

打靶场用virtualBox开靶机的时候会出现这种问题 并且报错代码是0x0 我出现这个问题与我的另一个软件有关 卸载之后靶机就可以正常启动了 但是又有问题了,我怎么打cs呢,求助大佬帮助

LeetCode--134

134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 …

关于纯前端想要变成全栈编写接口的学习推荐

推荐学习uniappuniclouduniadmin 学习成本低,不到一个月就能开发出自己的接口,上传到服务空间,并且能够实现后端的功能,能够调用接口 当然这里使用的不是mysql数据库,而是unicloud推荐的存储方式 操作起来也很方便

在TMP中计算书名号《》高度的问题

1)在TMP中计算书名号《》高度的问题 2)FMOD设置中关于Virtual Channel Count&Real Channel Count的参数疑问 3)Unity 2021.3.18f1 ParticleSystemTrailGeometryJob粒子拖尾系统崩溃 4)XLua打包Lua文件粒度问题 这是第375篇UWA…

2023 re:Invent 用 Amazon Q 打造你的知识库

前言 随着 ChatGPT 的问世,我们迎来了许多创新和变革的机会。一年一度的亚马逊云科技大会 re:Invent 也带来了许多前言的技术,其中 Amazon CEO Adam Selipsky 在 2023 re:Invent 大会中介绍 Amazon Q 让我印象深刻,这预示着生成式 AI 的又一…

Kafka 面试八股题整理

前言:本文是博主自行收集的Kafka相关的八股文问题,博主还在准备暑期实习中,应该会持续更新.... 参考: 32 道常见的 Kafka 面试题你都会吗?附答案 【Kafka】10道不得不会的 Kafka 面试题 掌握这10个常见的Kafka经典面试…

热闹元宵进行中,如何利用VR全景展示民宿品牌形象?

错峰出游闹元宵,元宵节恰逢周末,而且还是春节假期返工之后的首个休息日,不少人都想通过短途度假来缓解“节后综合征”。两位数的特价机票、打折的各种酒店让你实现“旅行自由”,那么如何知道特价酒店服务好不好呢?先别…

UI自动化测试:playwright工具(一):python环境下安装、UI录制使用(需要些代码能力)

一、python环境下安装playwright工具 1. 安装playwright库 pip install playwright -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com#至于镜像源,可以选,也可不选:#阿里云 http://mirrors.aliyun.com/pypi/simple/ #中国科技大学 https://py…

阿里云服务器最新收费标准及优惠价格参考(2024更新)

2024阿里云服务器优惠活动政策整理,轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年,云服务器4核16G10M带宽26元1个月、149元半年,阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价,企业用户2核4G5M带宽199元一年&#x…

高性能 Kafka 及常见面试题

Kafka 是一种分布式的,基于发布/订阅的消息系统,原本开发自 LinkedIn,用作 LinkedIn 的事件流(Event Stream)和运营数据处理管道(Pipeline)的基础。 基础原理详解可见 Kafka 基本架构及原理 基础…

Redis 16种妙用

1、缓存 2、数据共享分布式 3、分布式锁 4、全局ID 5、计数器 6、限流 7、位统计 8、购物车 9、用户消息时间线timeline 10、消息队列 11、抽奖 12、点赞、签到、打卡 13、商品标签 14、商品筛选 15、用户关注、推荐模型 16、排行榜 1、缓存 String类型 例如:热点…

算法【线性表的查找-顺序查找】

线性表的查找-顺序查找 顺序查找基本思想应用范围顺序表的表示数据元素类型定义查找算法示例分析 时间效率分析顺序查找的特点如何提高查找效率 顺序查找 基本思想 在表的多种结构定义方式中,线性表是最简单的一种。而顺序查找是线性表查找中最简单的一种。 顺序查…

Netty NIO 非阻塞模式

1.概要 1.1 说明 使用非阻塞的模式,就可以用一个现场,处理多个客户端的请求了 1.2 要点 ssc.configureBlocking(false);if(sc!null){ sc.configureBlocking(false); channels.add(sc); }if(len>0){ byteBuffer.flip(); 2.代码 2.1 服务端代码 …

YOLOv8改进 | Conv篇 | 利用YOLOv9的GELAN模块替换C2f结构(附轻量化版本 + 高效涨点版本 + 结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的GELAN模块来改进YOLOv8中的C2f,GELAN融合了CSPNet和ELAN机制同时其中利用到了RepConv在获取更多有效特征的同时在推理时专用单分支结构从而不影响推理速度,同时本文的内容提供了两种版本…

提高工作效率,《Linux常用命令文件配置》

在IC设计领域,所有的开发任务几乎都是在Linux操作系统上完成,因此需要掌握Linux操作系统的使用;Linux可以为工程师提供更好的开发环境和调试工具。还支持多种开发语言和编程环境,可以为数字IC芯片工程师提供更多的选择和灵活性。 作为IC工程…

c++ 继承虚基类

virtual加在b1b2,这样d类仅会有一个a类

Spark之【基础介绍】

Spark最初是由美国伯克利大学AMP实验室在2009年开发,Spark时基于内存计算的大数据并行计算框架,可以用于构建大型的、低延迟的数据分析应用程序。 Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。 Spark的特点 运行速度快 &am…

图解 Electron 进程模型

此前,已经介绍了《如何从 0 开始,创建一个 Electron 的 App》,每个人就有了一个梦开始的地方。如果想实现一个功能丰富的 App,了解一点基础知识,是非常必要的。比如,Electron 的进程模型。 一、简介 Chrome…

ChatGPT 国内快速上手指南

ChatGPT简介 ChatGPT是由OpenAI团队研发的自然语言处理模型,该模型在大量的互联网文本数据上进行了预训练,使其具备了深刻的语言理解和生成能力。 GPT拥有上亿个参数,这使得ChatGPT在处理各种语言任务时表现卓越。它的训练使得模型能够理解上…

office word保存pdf高质量设置

1 采用第三方pdf功能生成 分辨率越大质量越好