当前位置: 首页 > news >正文

掌握RESTful API:规范与设计详解

前言

RAML (RESTful API Modeling Language) 和 OAS (OpenAPI Specification) 都是用于描述和定义 RESTful API 的规范。它们分别提供了不同的功能和优势。

在这里插入图片描述

RAML(RESTful API Modeling Language):

RAML简介

RAML(RESTful API Modeling Language)是一种用于描述和建模 RESTful API 的规范语言。它提供了一种简洁和易于理解的方式来定义和文档化 API 的结构、行为和元数据。
它 不仅仅是一种标记语言,它还是一种设计工具,帮助开发团队以可读性强、一致性好的方式构建 API。RAML 的主要目标是提供一种简单的方式,使开发人员可以理解和使用 API,同时为团队成员、合作伙伴和其他开发者提供详细的文档和说明。

RAML格式说明

在 RAML 中,使用以下关键元素来描述 RESTful API:

  • 资源(Resource):表示 API 中的基础对象或概念。
  • 方法(Method):表示可以在资源上执行的操作,例如 GET、POST、PUT、DELETE 等。
  • 请求(Request):定义发送到 API 的请求的格式和内容。这包括请求头、请求体、请求参数等。
  • 响应(Response):定义 API 对请求的响应的格式和内容。这包括响应状态码、响应头和响应体等。
  • 参数(Parameter):用于描述请求或响应中的参数,例如查询参数、路径参数等。

RAML 还支持使用注释和示例来提供额外的信息和示例数据。这些注释和示例可以用于解释 API 的行为和用途,以及展示如何在实际情况中使用 API。

OAS(OpenAPI Specification):

OSA简介

OpenAPI Specification(OAS),也称为Swagger规范,是一种用于描述和定义 RESTful API 的规范语言。它提供了一种标准化的方式来描述 API 的结构、行为和元数据,并支持生成互动式文档、代码以及进行自动化测试和部署。
OAS 通过使用 JSON 或 YAML 格式的文档来描述 API 的各个方面,如路径、参数、请求体、响应和错误等。它定义了一组规范和约定,使得开发团队和开发者能够更好地理解和使用 API。

OAS格式

OAS 是另一种用于描述和定义 RESTful API 的规范。与 RAML 类似,OAS 提供了一种易于理解和一致性的语法,以便开发人员能够清楚地了解 API 的行为和功能。OAS 是基于 Swagger 规范开发的,它提供了一套全面的规范,包括定义 API 的各个方面的功能。
在 OAS 中,你可以使用以下关键元素来描述 RESTful API:

  • 路径(Path):表示 API 中的基础 URL 和端点。
  • 请求(Request):定义发送到 API 的请求的格式和内容,包括请求方法、请求头、请求体等。
  • 响应(Response):定义 API 对请求的响应的格式和内容,包括响应状态码、响应头和响应体等。
  • 参数(Parameter):用于描述请求或响应中的参数,例如查询参数、路径参数等。
  • 注释(Comment):用于提供额外的信息和解释 API 的行为和用途。
  • 示例(Example):用于展示如何在实际情况中使用 API,并提供示例数据。

RAML和OAS(OpenAPI Specification)的区别

RAML和OAS都是用于描述和定义RESTful API的规范,但它们有一些不同之处:

  • 格式:RAML使用自己的格式和语法,而OAS使用JSON或YAML格式。RAML的格式相对更简洁,易于编辑和阅读,而OAS的JSON和YAML格式更为通用和标准化。

  • 可读性:RAML具有良好的可读性和可理解性,它使用简洁且自然的语法来描述API的组件(如资源、方法、参数等)和关系。OAS的JSON和YAML格式相对较冗长,可读性较差。

  • 版本支持:RAML有多个版本,当前较新的版本是RAML 1.0。OAS也有多个版本,其中OAS 3.0是较新和广泛使用的版本。

  • 扩展性:RAML在设计上更加灵活和可扩展。它支持自定义标记和注释,并且有一个模块化的设计,使得可以轻松定义和重用API组件。OAS在设计上较为规范,扩展性相对较差。

  • 生态系统和工具支持:OAS在行业中更为常见和广泛使用,拥有更强大和丰富的生态系统和工具支持。许多常见的API工具和平台都提供对OAS的良好支持,如Swagger、Postman和Apigee等。相比之下,RAML的工具和平台支持相对较少。

需要注意的是,RAML和OAS之间并没有明确的优劣之分。选择使用哪种规范取决于个人或团队的偏好、项目要求和工具生态系统支持等因素。在选择之前,建议对它们的语法、特性和生态系统进行深入了解,并考虑与你的项目需求和团队背景相匹配的因素。

RESTful API 规范使用个人建议

在这里插入图片描述

1. 遵循行业普遍标准

选择一种广泛使用的 API 规范,如 OpenAPI Specification (OAS) 或 RAML。这些标准提供了一套共享的语法和结构,能够使团队成员更容易理解和协作。
选择一种广泛的规范,主要是为了减少团队新人的学习曲线;规范的社区力量,方便后续升级。

2. 保持设计一致性

确保团队中的每个人都遵循相同的 API 设计风格和规则。
制定一套统一的命名约定、URI 结构、HTTP 方法使用、错误处理等准则,以保持 API 的一致性和易用性。

3. 遵循RESTful 架构原则

遵循 RESTful 架构原则,例如使用无状态的通信、资源的合适表达和标识、合理的 URI 设计、适当的 HTTP 方法选择等。这能帮助开发者更好地理解和使用 API。

4. 良好的API 文档和描述

使用规范的 API 文档工具,如 Swagger、ReDoc 或 RAML 等,为 API 提供详细的文档和描述。这样能够方便其他团队成员了解 API 的能力、参数、示例和用法等。

5. 做好版本管理

为 API 引入版本管理,以便在进行重大变更时能够保持向后兼容性。这可以通过在 URI 或请求头中包含版本号来实现,并在文档中记录每个版本的变更历史和支持情况。

6. 注意安全性和权限控制

确保 API 具备适当的安全性和权限控制机制。使用标准的身份验证和授权方法,如 OAuth 2.0,以保护敏感数据和资源。同时,限制和管理 API 的访问权限,确保只有经过身份验证和授权的用户才能使用相关功能。

建议不要在非开发环境开放。

7. 定义清晰的错误处理和状态码

定义清晰的错误处理机制和标准的 HTTP 状态码,以便开发者能够准确理解和处理 API 调用过程中的各种结果和异常情况。

8. 引入接口版本和退化策略

引入 API 的退化策略,以确保对于旧版本的客户端仍然能够有效地使用并提供必要的支持。这可能涉及废弃和删除旧版本的 API,或是提供适当的延期通知和迁移指南。

9. 性能和缓存机制

优化 API 的性能和响应时间,使用适当的缓存策略和技术来减轻服务器负载,并提供合理的缓存控制头部以支持客户端缓存。

10. 持续改进

不断进行 API 规范的评估和改进。与开发人员、测试团队和 API 使用者保持密切的反馈和沟通,收集意见和建议,以进一步优化 API 规范和设计。

总结

每个团队的需求和情况可能有所不同,因此可以根据实际情况进行调整和扩展。始终将可读性、一致性、易用性和安全性等原则置于设计的核心,并遵循行业标准和最佳实践。
始终要记得一件事:呈现出来的东西都是要给人看的,如果团队成员不好理解或者说协作效率下降,那么它就不适合。 没有最好的,只有最适合的。

相关文章:

掌握RESTful API:规范与设计详解

前言 RAML (RESTful API Modeling Language) 和 OAS (OpenAPI Specification) 都是用于描述和定义 RESTful API 的规范。它们分别提供了不同的功能和优势。 RAML(RESTful API Modeling Language): RAML简介 RAML(RESTful API M…...

「更新」Topaz Video AI v4.0.3中文版

Topaz Video AI是一款功能强大的视频处理软件,它利用人工智能技术对视频进行智能分析和优化,旨在为用户提供高效、智能的视频编辑和增强功能。 首先,Topaz Video AI具备强大的视频修复功能。它可以自动识别并修复视频中的各种问题&#xff0…...

OpenAI最新官方GPT最佳实践指南,一文讲清ChatGPT的Prompt玩法

原文:Sina Visitor System OpenAI的官网发表万字GPT最佳实践指南,讲清Prompt提示词的原则和策略,这里是总结和全文翻译 原创图像,AI辅助生成 OpenAI的官网上刚刚发表一篇万字的GPT最佳实践指南,这份指南把写好Promp…...

树结构及其算法-用链表来实现二叉树

目录 树结构及其算法-用链表来实现二叉树 C代码 树结构及其算法-用链表来实现二叉树 以链表实现二叉树就是使用链表来存储二叉树,也就是运用动态分配内存和指针的方式来建立二叉树。 使用链表来表示二叉树的好处是节点的增加与删除操作相当容易,缺点…...

openwrt(三):在hostapd获取已关联的STA的MAC地址

在深度开发openwrt的hostapd模块的时候,有些功能的实现需要获取已关联的sta的mac地址,下面是相关的方法描述: 第一、在sta_info.c文件中,可以找到一个名为struct hostap_sta_info * hostapd_get_sta(struct hostapd_data *hapd, …...

为何袁世凯要把“元宵节”改为“上元节”?

网民把春节除夕日排除在法定假期之外的相关热议,在微博评论区部分已被关闭。官方学者的解释是:“回归传统。” 这就令人难免要回顾历史,并发觉只有在袁世凯称帝之后,才有过取消“元宵节”改为“上元节”的笑话,因为“元…...

python将图片序列保存成gif

这里用到的模块是imageio。用imageio.mimsave即可将图片序列保存成gif动态图。以下是本人编写的小实验: import cv2 import imageiopaths ["./images/0001.png", "./images/0002.png", "./images/0003.png", ...] frames [] for i…...

UE4用C++修改蓝图对象的属性值

if (auto Property FindFProperty<FStrProperty>(Class, "A")){Object->Modify();Property->SetPropertyValue_InContainer(Object.GetClass(), "OK");}...

供应商等级:一级、二级和三级供应商之间有什么区别

作为一名专业采购人员&#xff0c;你知道拥有一个可靠且具有成本效益的供应链有多么重要。确保供应链顺利运行的方法之一就是利用供应商分级。 什么是供应商分级&#xff1f; 供应商分级是根据供应商的绩效和对企业的重要性&#xff0c;对其进行分类的做法。 因此&#xff0c…...

软考 系统架构设计师系列知识点之净室软件工程(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之净室软件工程&#xff08;2&#xff09; 所属章节&#xff1a; 第5章. 软件工程基础知识 第5节. 净室软件工程 相关试题 1. 以下关于软件开发方法的叙述&#xff0c;错误的是&#xff08;&#xff09;。 A. 对于较为…...

『VUE H5页面 - PDF预览』

使用依赖&#xff1a;vue-pdf实现需求&#xff1a;将 PDF url 地址 转换为本地页面预览 <template><div class"pdf-preview"><NavBar /><div class"container"><VuePdf v-for"i in numPages" :key"i" cla…...

使用lua-resty-request库编写爬虫IP实现数据抓取

目录 一、lua-resty-request库介绍 二、使用lua-resty-request库进行IP数据抓取 1、获取IP地址 2、设置请求 3、处理数据 三、代码实现 四、注意事项 五、总结 本文将深入探讨如何使用lua-resty-request库在爬虫程序中实现IP数据抓取。我们将首先介绍lua-resty-request…...

vue-admin-templete项目配置在手机上预览

参考文档&#xff1a; https://blog.csdn.net/qq_29752857/article/details/109802801想要在手机上预览本地打开的vue-admin-templete项目&#xff0c;首先要确保手机和电脑在同一网段。 参考文档&#xff1a;https://blog.csdn.net/m0_57236802/article/details/1315234471.查…...

服务号升级订阅号的流程

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;首先我们要知道服务号和订阅号有什么区别。服务号侧重于对用户进行服务&#xff0c;每月可推送4次&#xff0c;每次最多8篇文章&#xff0c;发送的消息直接显示在好友列表中。订阅号更侧重于信息传…...

redhat7.4 安装lnmp操作环境

PacVim安装 https://baijiahao.baidu.com/s?id1601033830453371540&wfrspider&forpc 安装php https://www.cnblogs.com/alliancehacker/p/12255445.html https://blog.csdn.net/weixin_39709920/article/details/104274545 安装mysql https://www.cnblogs.com/laumian…...

Java判断是否有特殊字符串

//特殊字符串过滤private static String REGEX_RULE "[ _~!#$%^&*()|{}:;,\\[\\].<>/?~&#xff01;#&#xffe5;%……&*&#xff08;&#xff09;——|{}【】‘&#xff1b;&#xff1a;\"”“’。&#xff0c;、&#xff1f;]|\n|\r|\t";pri…...

服务器搭建:从零开始创建自己的Spring Boot应用【含登录、注册功能】

当然&#xff0c;你可以先按照IDEA搭建SSM框架【配置类、新手向】完成基础框架的搭建 步骤 1&#xff1a;设计并实现服务器端的用户数据库 在这个示例中&#xff0c;我们将使用MySQL数据库。首先&#xff0c;你需要安装MySQL并创建一个数据库以存储用户信息。以下是一些基本步…...

家用小型洗衣机哪款性价比高?公认好用四款内衣洗衣机推荐

小型的内衣洗衣机由于体积小巧&#xff0c;而且实用&#xff0c;非常适合没有太多空闲时间的上班族以及小型住户的使用。想要挑选到一款能够满足每日清洗需要&#xff0c;同时拥有便携与高效率的小型内衣洗衣机&#xff0c;也许会让你选择得有些烦恼。我们为大家挑选了一些性价…...

Sui zkSend,创建链接可直接发送SUI,快来体验吧

基于zkLogin和Sui的本机密码学构建&#xff0c;zkSend允许用户创建包含特定数量SUI的链接。该链接可以通过任何消息客户端发送&#xff0c;例如电子邮件和直接消息&#xff0c;甚至可以在媒体上转换成QR码。 使用zkSend发送SUI比复制和粘贴钱包地址&#xff0c;然后授权token转…...

SQL面试

#(1)请写出要查询员工J开头的名字其工号(EMPNO)及部门名称(DEPTNA)的 SQL语句SELECT e.emp,e.name,d.deptna FROM emp e left join dept d on d.deptno e.deptno where e.name like J%#(2)请写出要查询 Kevin 所在部门的部门代号(DEPTNO)及部门名称(DEPTNA)的 SQL 语句SELECT e…...

Elasticsearch(一)---介绍

简介 Elasticsearch是一个基于Lucene的实际的分布式搜索和分析引擎。设计用于云计算中&#xff0c;能够达到近实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速&#xff0c;安装使用方便。基于RESTful接口。 官网地址&#xff1a;Elasticsearch 平台 — 大规模查找…...

Vscode LinuxC++环境配置

C环境配置 文章目录 C环境配置一、Visual Studio Code相关信息二、Python开发环境配置三、C 开发环境配置四、第一个C程序五、附录&#xff1a;vs code 中变量解释 一、Visual Studio Code相关信息 Visual Studio Code 下载地址&#xff1a;https://code.visualstudio.com/dow…...

【tensorboard打开失败】No dashboards are active for the current data set.

这里我再跟视频学的时候&#xff0c;找了很多的指令&#xff0c;说是对应版本不一样&#xff0c;但是发现用了很多指令都可以弹出来跳转的url&#xff0c;那应该就不是输入指令的问题 直到我想把logs里面的文件删掉重新跑的时候&#xff0c;我突然注意到这里有中文字符&#xf…...

客服管理者如何调动客服人员的积极性?

客户是企业的财富&#xff0c;良好的客户服务体验可以有效地促进企业的销售和声誉&#xff0c;因此&#xff0c;客服工作显得尤为重要。而客服人员的积极性直接影响了整个客服部门的质量和效率。如何调动客服人员的积极性&#xff0c;成为了每个客服管理者都需要面对的难题。本…...

Jenkins自动化部署简单配置

下载安装jenkins 安装Jenkins步骤 点击Next的时候会有jdk版本跟Jenkins版本不符合的情况 1. 看下任务管理器内Jenkins服务是否启动&#xff0c;在浏览器里面输入localhost:2023&#xff08;端口号是安装时输入的&#xff09; 2. 根据路径找到放置密码的文件&#xff08;C…...

Linux————内置命令大全

&#xff08;一&#xff09;内置命令 Shell 内置命令&#xff0c;就是由 Bash Shell 自身提供的命令&#xff0c;而不是文件系统中的可执行脚本文件。内置命令的执行速度通常优于外部命令&#xff0c;因为执行外部命令不仅会导致磁盘I/O操作&#xff0c;而且还需要为其fork一个…...

从用户角度出发,如何优化大数据可视化体验|北京蓝蓝UI设计公司

作者&#xff1a;蓝蓝设计-鹤鹤 大数据已经成为人们探索世界的新工具。但是&#xff0c;对于普通用户而言&#xff0c;大数据往往比较抽象和难以理解&#xff0c;因此&#xff0c;大数据可视化作为一种非常有效的工具工具被广泛应用。然而&#xff0c;在实际应用中&#xff0c…...

【vue】封装树形下拉框组件 el-popover+el-tree+el-select

父组件使用 <template><div>{{ array }} 更多属性详见wgyTreeSelect组件<wgyTreeSelectv-model"array":list"list":multiple"true":disabled-ids"[111,113,2]"/></div> </template><script> /*…...

docker安装Kafka,SpringBoot整合Kafka

#拉取镜像 docker pull wurstmeister/zookeeper #运行容器 docker run --restartalways --name zookeeper -p 2181:2181 \ -v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper#拉取镜像 docker pull wurstmeister/kafka#运行容器 docker run --restartalways --name …...

MySQL - InnoDB 的事务支持、锁机制

InnoDB 存储引擎实现了强大的事务支持和锁机制&#xff1a; 事务原理&#xff1a; ACID 属性&#xff1a;InnoDB 支持 ACID&#xff08;原子性、一致性、隔离性、持久性&#xff09;属性&#xff0c;确保数据的一致性和可靠性。事务是一组 SQL 操作&#xff0c;要么全部执行&…...