【API架构】REST API 设计的原则和最佳实践

这篇最佳实践文章面向对创建 RESTful Web 服务感兴趣的开发人员,这些服务提供跨多个服务套件的高可靠性和一致性;遵循这些准则;服务定位于内部和外部客户快速、广泛、公开采用。
这是一个完整的图表,可以轻松理解 REST API 的原理、方法和最佳实践。

305b137f1238f20c412688d049e27e50.png

现在,让我们从每个盒子的原理开始详细说明它。


六项原则/约束

  1. 客户端-服务器:关注点分离是客户端-服务器约束背后的原则。通过将用户界面问题与数据存储问题分开,我们提高了用户界面跨多个平台的可移植性,并通过简化服务器组件提高了可扩展性。

  2. 无状态:通信必须是无状态的,如客户端-无状态-服务器 (CSS) 风格。从客户端到服务器的每个请求都必须包含理解请求所需的所有信息。因此,会话状态完全保留在客户端上。

  3. 可缓存:为了提高网络效率,我们添加了缓存约束以形成客户端-缓存-无状态-服务器风格。缓存约束要求数据响应带有隐式或显式标签为可缓存或不可缓存的请求。如果响应是可缓存的,则客户端缓存有权为以后的等效请求重用该响应数据。

  4. 分层系统:客户端通常无法判断它是直接连接到终端服务器还是沿途的中介。中间服务器可以通过启用负载平衡和提供共享缓存来提高系统可扩展性。层也可以强制执行安全策略。

  5. 按需代码:REST 允许通过下载和执行小程序或脚本形式的代码来扩展客户端功能。通过减少需要预先实现的功能数量来简化客户端。它允许在部署后下载功能,提高了系统的可扩展性。

  6. 统一接口:通过将通用性的软件工程原理应用于组件接口,简化了整个系统架构,提高了交互的可见性。实现与它们提供的服务分离,这鼓励了独立的可进化性。REST 定义了四个接口约束:资源的识别、通过表示的资源操作、自描述消息和作为应用程序状态引擎的超媒体。

    1. 自描述消息:每条消息都包含足够的信息来描述如何处理消息。

    2. 基于资源:在请求中使用 URI 作为资源标识符来标识单个资源。资源本身在概念上与返回给客户端的表示分开。

    3. 通过表示操作资源:当客户端表示资源(包括附加的任何元数据)时,它有足够的信息来修改或删除服务器上的资源,前提是它有这样做的权限。

    4. 超媒体作为应用程序状态引擎 (HATEOAS):客户端通过正文内容、查询字符串参数、请求标头和请求的 URI(资源名称)传递状态。服务通过正文内容、响应代码和响应头向客户端提供状态。

最佳实践


现在,让我们换个角度来了解 REST 的基本最佳实践,这是每个工程师都应该知道的。

  • 保持简单和细粒度:创建模拟系统底层应用程序域或系统数据库架构的 API。最终,您将需要聚合服务——利用多种底层资源来减少闲聊的服务。

  • 过滤和排序:对于大型数据集,从带宽的角度来看,限制返回的数据量至关重要。此外,我们可能希望指定要包含在响应中的资源的字段或属性,从而限制返回的数据量。我们最终想要查询特定值并对返回的数据进行排序。

  • 版本控制:有很多方法可以破坏合同并对 API 开发中的客户产生负面影响。如果您不确定更改的后果,最好谨慎行事并考虑版本控制。在决定新版本是否合适或对现有表示的修改是否充分和可接受时,需要考虑几个因素。由于维护多个版本变得繁琐、复杂、容易出错且成本高昂,因此对于任何给定资源,您应该支持不超过两个版本。

  • 缓存:缓存通过启用系统中的层来消除检索请求数据的远程调用来增强可扩展性。服务通过在响应(如 Cache-Control、Expires、Pragma、Last-Modified 等)上设置标头来提高缓存能力

  • 分页:REST 的原则之一是连通性——通过超媒体链接。同时,没有它们,服务仍然有用。当链接在响应中返回时,API 变得更具自我描述性。对于支持分页的响应中返回的集合,“first”、“last”、“next”和“prev”链接至少是有益的。

  • 资源命名:当资源命名正确时,API 是直观且易于使用的。做得不好,同样的 API 会让人感觉很笨拙,并且难以使用和理解。RESTful API 适用于消费者。URI 的名称和结构应该向这些消费者传达含义。通常很难知道数据边界应该是什么,但是通过了解您的数据,您很可能有能力进行尝试,并将什么作为代表返回给您的客户是有意义的。为您的客户设计,而不是为您的数据设计。

  • - 复数:普遍接受的做法是始终在节点名称中使用复数形式,以保持您的 API URI 在所有 HTTP 方法中保持一致。原因是“客户”是服务套件中的一个集合,而 ID(例如 33245)指的是集合中的这些客户之一。

  • 监控:确保添加各种监控以提高 API 的质量或性能。数据点可以是响应时间(P50、p90、P99)、状态代码(5XX、4XX 等)、网络带宽等等。

  • 安全:

    • - 授权/认证:对服务的授权与对任何应用程序的授权没有什么不同。问这个问题,“这个主体对给定资源是否有请求的权限?”

    • - CORS:在服务器上实现 CORS 就像在响应中发送额外的 HTTP 标头一样简单,例如 Access-Control-Allow-Origin、Access-Control-Allow-Credentials 等

    • - TLS:所有身份验证都应使用 SSL。OAuth2 需要授权服务器和访问令牌凭据才能使用 TLS。

    • - 幂等性:如果执行一次或多次,将产生相同结果的操作。根据其适用的上下文,它可能具有不同的含义。例如,在具有副作用的方法或子程序调用的情况下,这意味着修改后的状态在第一次调用后保持不变。

    • - 输入验证:验证服务器上的所有输入。接受“已知”好的输入并拒绝错误的输入,防止 SQL 和 NoSQL 注入,将消息大小限制为字段的确切长度,服务应仅显示一般错误消息等等。

    • - 限速:是一种限制网络流量的策略。它限制了某人在特定时间范围内重复操作的频率 - 例如,尝试登录帐户。

    • - 记录:确保您不会意外记录任何个人身份信息 (PII)。

至此,我结束了这次学习,我希望你今天学到了一些新东西。请分享给更多的同事或朋友。

本文https://jiagoushi.pro/principles-best-practices-rest-api-design
讨论:知识星球【首席架构师圈】或者加微信小号【cea_csa_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
aad6d39f8aff2d21f238985a6bc7c812.png
微信小号

【cea_csa_cto】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

29f7d99cf6657b8842ccfea46cbe2732.png

QQ群

【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

b1b79350f7ec34c0694680b30bad49cc.png

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

b70bddffcc246c2d85f173fcee071672.png

知识星球向大咖提问,近距离接触,或者获得私密资料分享。

c7e8bae0103ef4bae753bf205fdb2a76.png

喜马拉雅路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
微博【智能时刻】智能时刻
哔哩哔哩【超级架构师】

aa1f12917324d9fdeca3cc0b68720319.png

抖音【cea_cio】超级架构师

41aaf0b3758c6ae59478cab4bddc296b.png

快手【cea_cio_cto】超级架构师

cfe36edb4bbe4587f11e8188a7db0f6b.png

小红书【cea_csa_cto】超级架构师

acec760706695541a583c68bf3b93140.png




谢谢大家关注,转发,点赞和点在看。

架构师研究会
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
REST API 最佳实践REST 端点设计示例
m0_57290114的博客
04-11 3556
在 Web 开发中,REST API 在确保客户端和服务器之间的顺畅通信方面发挥着重要作用。 您可以将客户端视为前端,将服务器视为后端。 客户端(前端)和服务器(后端)之间的通信通常不是超级直接的。因此,我们使用一个称为应用程序编程接口(或API)的接口来充当客户端和服务器之间的中介。 由于 API 在这种客户端-服务器通信中起着至关重要的作用,因此在设计 API 时应始终牢记最佳实践。这有助于维护它们的开发人员以及使用它们的开发人员在执行这些职责时不会遇到问题。 在本文中,我将带您了解在制作 RE
flask_restapi_clean_architecture:Flask REST API的干净架构实践
05-04
Flask REST API清洁架构实践 Flask REST API的清洁架构实践。 这是一个实践项目,我用来通过使用完整的身份验证/授权协议,依赖项注入以及Swagger文档来实现REST API来学习Clean Architecture。 基本文件夹结构 ...
REST api架构
04-17
SDK 博文链接:https://hudeyong926.iteye.com/blog/1829987
一文梳理REST API设计原则
我兜里有糖
07-01 524
什么是 RESTREST架构风格描述了六个约束。应用于体系结构的这些约束最初由Roy Fielding在他的博士论文中提出(参见 https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm)该文是RESTful-style的基础 。 这六个约束是: Uniform Interface (统一接口) 统一接口约束定义了客户端和服务器之间的接口。它简化并解耦了架构,使每个部件都能独立演变。 统一接口的四个指导原则是: Re
微服务 REST API 设计原则
温故而知新
02-08 528
REST API 设计原则 REST API设计很有讲究,我司总结了一些规范和原则,详见 Cisco REST API 规范,编译如下: REST 方法 GET 方法的响应是由所请求URL代表的资源的表示 GET 方法不会改变请求URL所代表的资源 POST 请求在所请求的URL 路径下创建一个新的资源以作为叶子节点 POST 响应体或者为空(响应状态码为204...
REST-API-best-practices:概述 REST API 的约束以及设计和创建 API最佳实践。 它还着眼于对 APIRESTful 程度进行分级的方法
07-06
本白皮书的目的是了解创建 RESTful API 涉及哪些约束以及 Web REST API最佳实践是什么。 REST 约束 客户端服务器 无国籍 缓存 统一界面 分层系统 按需代码(可选) 客户端服务器 客户端-服务器约束侧重于关注点...
RESTful API设计原则最佳实践
REST (Representational State Transfer) API设计规范是一种用于构建Web服务的架构风格,由Roy Thomas Fielding博士在其博士论文中提出。它不是一个严格的标准,而是一种设计理念,旨在利用HTTP协议的固有特性来实现...
REST API design
大鹏的博客
12-04 329
Rest API Design
我是Alvin家鸡鸭鱼的小米米
08-31 875
本人最近负责Zuora Rest API设计工作,总结了一下Restful设计的规范。 1. 给API加上版本 API版本应该是必备的。这样API不会随时间过时。一种方法是把版本放到URL里(/api/v1...) 另一个巧妙的花招是使用 Accept HTTP header,来传递需要的版本,正如github所做的。(https://developer.github.
java rest的说明
南方少年的专栏
01-22 614
[b]rest[/b] rest,即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。 目录 简介 REST关键原则 REST和MVC的关系 总结 展开 简介 REST关键原则 RES...
REST设计规则
08-19 581
1.简介 REST(Representational State Transfer), 表述性状态转移是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格. REST只是一种概念、风格或者约束,是回归HTTP本身的建议. REST,SOAP,XML-RPC是目前三种主流的Web服务实现方案。REST相比其他两种更加简洁。 2.REST特点 REST应用
优秀REST风格 API设计原则
热门推荐
逍遥子曰:
01-10 3万+
本文由逍遥子翻译自:https://codeplanet.io/principles-good-restful-api-design/ 文中注释由逍遥子根据个人理解填写,转载时请附带本文的连接。 设计优秀的REST风格API非常困难!API是服务提供方和使用方之间的契约,打破该契约将会给服务端开发人员招来非常大的麻烦,这些麻烦来自于使用API的开发人员,因为对API的改动会导致他们的移动...
优秀Rest风格API设计原则
周先生丶的博客
07-21 281
Get:从服务器获取一个指定资源或一个资源集合。 Post:在服务器上创建一个资源。 Put:更新服务器上的一个资源,需要提供整个资源。 Patch:更新服务器上的一个资源,只提供资源中改变的那部分属性。 Delete:移除服务器上的一个资源。 Head:获取一个资源的元数据。 Options:获取当前用户对资源的访问权限。 原则上URL不包含动作/动词。 端点通常使用复数。 过...
RESTful-API设计原则
阿璐4r的博客
06-23 596
REST 代表的是表现层状态转移(REpresentational State Transfer)它只是一种软件架构风格,是一组架构约束条件和原则,而不是技术框架。REST 规范把所有内容都视为资源,也就是说网络上一切皆资源。REST 架构对资源的操作包括获取、创建、修改和删除,这些操作正好对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法。 1.URI规范 资源名使用名词而不是动词,并且用名词复数表示。 Collection:一堆资源的集合。例如我们系统里有很多用户(Us.
RESTful API设计原则
愤怒的小兵
03-23 444
RESTful(Representational State Transfer)本质是一种架构,互联网软件架构。 通信协议 尽可能使用https协议 部署路径 尽量部署于专用域名,如 https://pandora128.cn 或主域名下专用路径,如 https://pandora128.cn/fastapi 版本号 将版本号放在URL中,如百度地图API https://api.map.b...
Restful API 架构设计参考原则
摩登都市天空---专栏
12-13 4193
一. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强...
写文章

热门文章

  • 【Web后端架构】2022年10个最佳Web开发后端框架 18658
  • 【数据编制架构】什么是数据编织(Data fabric)? 完整指南 11206
  • 【ChatGPT】GPT-3.5+ChatGPT:图解概述 9495
  • 【领域驱动设计】三分钟搞懂领域驱动设计 7930
  • 【RPA技术】前 5 个开源 RPA 框架——以及如何选择 7495

分类专栏

  • 软件工程 2篇
  • 软件设计 2篇
  • 数据应用架构 2篇
  • 数据建模 1篇
  • 领域驱动设计 1篇
  • 自然语言处理 9篇
  • MLOps 2篇
  • Web开发 9篇
  • 数据安全 4篇
  • Python 7篇
  • IT管理 25篇
  • AIGC 15篇
  • IT战略 20篇
  • 开源软件 27篇
  • 全栈开发 21篇
  • IT运营 14篇
  • 监控 4篇
  • 企业架构 18篇
  • 人工智能 31篇
  • 大数据 3篇
  • 深度学习 3篇
  • LLM 18篇
  • 云原生
  • AIOps 1篇
  • 低代码开发 2篇
  • ChatGPT 7篇
  • 软件开发 15篇
  • 前端开发 30篇
  • Angular 5篇
  • 集成 1篇
  • 后端开发 11篇
  • DevOps 15篇
  • IT治理 12篇
  • 可靠性工程 8篇
  • CIO 11篇
  • 数据架构 14篇
  • 数据 10篇
  • IT运维 13篇
  • 软件架构 15篇
  • 容器 3篇
  • 低代码 9篇
  • 领导力 2篇
  • 敏捷 2篇
  • 技术管理 3篇
  • 安全 1篇
  • 聊天机器人 1篇
  • 数据治理 4篇
  • 客户价值 1篇
  • 风险管理 3篇
  • 数据科学 3篇
  • 供应商管理
  • 合规 4篇
  • 物联网 7篇
  • 区块链 2篇
  • 网络安全 1篇
  • 产品运营 1篇
  • 数据隐私 6篇
  • Archimate 1篇
  • 工业物联网 5篇
  • 工程管理 4篇
  • 技术选型 12篇
  • 云计算 7篇
  • 技术架构 18篇
  • CDO 7篇
  • Power Apps 6篇
  • 企业架构框架 11篇
  • TOGAF 8篇
  • 数据网格 1篇
  • 数据编织 2篇
  • SaaS 1篇
  • 软件 3篇
  • 移动 1篇
  • 业务架构 6篇
  • 架构质量 2篇
  • 数据管理 7篇
  • 架构模式 13篇
  • 数字化转型 4篇
  • 数据战略 2篇
  • 微服务 11篇
  • IAM 2篇
  • 应用安全 3篇
  • GCP 2篇
  • SRE 5篇
  • IT人才 7篇
  • 数据保护 2篇
  • Azure 3篇
  • 数据分析 5篇
  • 云架构 4篇
  • 数字化 4篇
  • Java 7篇
  • 首席数字化官 3篇
  • 创新 1篇
  • IT技术 8篇

最新评论

  • 「首席架构师推荐」统计软件一览表

    2301_78685451: SUDAAN 添加到SAS和SPSS进行统计调查如何操作呀

  • Dynamics 365:安全的客户参与应用程序

    普通网友: 大佬高质量文章,图文并茂,逻辑清晰,受益匪浅,期待大佬新作。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 为数据保护揭开Microsoft Dynamics 365安全角色的神秘面纱

    普通网友: 你的博客内容深入浅出,总是让我不再感到学习的困难,每一篇博文都是我学习的宝库。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 【数据编制架构】数据编织(Data fabric)架构完整指南

    sayfox: 国内有没有?

  • 「企业架构框架」Zachman框架简介

    Kwan的解忧杂货铺@新空间代码工作室: 博主的文章总是如一盏明灯,指引我前进,每一篇博文都是一次心灵的提升,你的分享总是如此珍贵,你的博文总是让我拓展了视野,增长了见识,感谢你一直以来的无私奉献。期待更多知识的分享。非常感激你的专业知识传授。

最新文章

  • 为数据保护揭开Microsoft Dynamics 365安全角色的神秘面纱
  • Dynamics 365:安全的客户参与应用程序
  • 恭喜了!全体架构师彻底狂欢吧!这个好消息来得太及时!
2024
05月 13篇
04月 1篇
03月 2篇
02月 8篇
01月 34篇
2023年281篇
2022年294篇
2021年180篇
2020年222篇
2019年138篇
2018年113篇
2017年68篇
2016年63篇
2015年82篇

目录

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师研究会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家甘井子玻璃钢雕塑厂家蓬莱玻璃钢仿铜雕塑主题玻璃钢卡通雕塑源头好货张掖玻璃钢植物雕塑安装安徽玻璃钢卡通草莓雕塑湖北玻璃钢彩绘雕塑周口玻璃钢雕塑加工北京玻璃钢广场雕塑定制广东玻璃钢雕塑的特点邳州玻璃钢雕塑厂阜阳玻璃钢雕塑批发泌阳玻璃钢雕塑价格灵璧玻璃钢花盆花器湖北锻铜玻璃钢人物雕塑厂家邯郸玻璃钢人物雕塑厂家玻璃钢香蕉雕塑加工广州海珠商场美陈玻璃钢雕塑线下销售策略涟源玻璃钢雕塑户外深圳商场美陈生产企业廊坊玻璃钢雕塑制作绵阳玻璃钢雕塑摆件施工方法玻璃钢仿真奶茶雕塑玻璃钢雕塑事件pu雕塑代替玻璃钢仙桃玻璃钢长颈雕塑马鞍山创意玻璃钢雕塑定做价格玻璃钢神像雕塑视频拱墅区玻璃钢雕塑设计广州玻璃钢卡通雕塑直销价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化