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

news2024/11/27 22:37:24

前言

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 规范和设计。

总结

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

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

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

相关文章

CSC公派研究生项目|北语北外2024年寒假英语培训班正在招生

北京语言大学出国部、北京外国语大学出国部近期发布了2024年寒假“国家建设高水平大学公派研究生项目”英语培训的通知,知识人网小编特归纳整理,供有需求的同学参考。 北京语言大学 我部将于2024年寒假举办“国家建设高水平大学公派研究生项目”英语培训…

银行账单转换beancount

用了beancount来记账后,发现每月的账单手动记是一件极其麻烦的事情。 然后再github搜索一通后,有double-entry-generator(https://github.com/deb-sig/double-entry-generator)能转换支付宝/微信的账单,但是没有自己用…

基于STM32F412RET6的智能桶硬件设计

一、智能桶功能需求: 智能桶是一直采用Cortex-M4 嵌入式平台,搭载NB-IotTO通讯模组、智能称重采集、智能门锁监控以及温度监测等装置。主要功能如下: ▲ 具有GPS定位功能,可以通过后台APP实时定位智能桶的位置。 ▲ 具有温度监测功…

大厂面试题-Netty中Reactor模式的理解

Reactor其实是在NIO多路复用的基础上提出的一个高性能IO设计模式。 它的核心思想是把响应IO事件和业务处理进行分离,通过一个或者多个线程来处理IO事件。 然后把就绪的事件分发给业务线程进行异步处理。 Reactor模型有三个重要的组件: Reactor&#…

基于单片机的可穿戴个人健康监测仪-智能手环

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、方案的设计与论证2.1设计任务及要求2.2 模块技术和方法综述2.3 设计可能遇到的困难 二、 系统总体框架3.1 硬件设计 三 软件部分4.1 主程序流程框 四、 结论五、 文章目录 概要 近几年智能化的不断发展&#…

GEE——提取制定多波段影像的属性值(按照制定属性名称和属性值)输出格式为矢量格式

简介: 这里我们很多时候,需要提取制定影像,或者多波段影像制定区域的值,这里有一个问题是我们一般输出的结果仅仅是一个字典类型的对象,而我们不知道如何按照一个矢量输入,这里我们首先要做的就是进行多波段值在制定区域的提取,随后就是分别对其新的字典的键、值的设定…

Leetcode76最小覆盖子串

思路:滑动窗口思想 1. 滑动窗口是什么:用一个滑动窗口为覆盖目标子串的字符串 2.怎么移动窗口:当不满足覆盖时右指针移动扩大范围,当覆盖了就移动左指针缩减范围直到再次不覆盖 3. 怎么判断是否覆盖:这里使用两个哈…

Qt封装的Halcon显示控件,支持ROI绘制

前言 目前机器视觉ROI交互控件在C#上做的比较多,而Qt上做的比较少,根据作者 VSQtHalcon——显示图片,实现鼠标缩放、移动图片的文章,我在显示和移动控件的基础上,增加了ROI设置功能,并封装成了一个独立的Q…

记录一次normal diskgroup添加磁盘组操作

客户的一个磁盘组空间快满,需要添加一下磁盘,磁盘组的冗余模式为normal,本来觉得是一件不难的事情,在添加过程中还是遇到了一些问题。 本来为2个500G的磁盘组成的normal模式磁盘组,目前可用空间只剩下170G左右的空间&…

【多线程】线程池总结带你详细了解线程池

文章目录 线程池标准库中的线程池Executors 创建线程池的几种方式ThreadPoolExecutor创建线程池 模拟实现线程池 线程池 线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配…

基于单片机的自动感应门设计

博主主页:单片机辅导设计 博主简介:专注单片机技术领域和毕业设计项目。 主要内容:毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、自动感应门设计的功能概述二、系统总体方案2.1系统的总体计划2.2元器件的介绍2.2.1单片机的…

全局安装 vue-cli 报错 Error: EPERM: operation not permitted, open

原因:没有权限 解决方法:CMD 点击右键 以管理员身份运行。

IDEA创建Springboot多模块项目

一、创建父模块 File --> New --> Project ,选择 “ Spring Initalizr ” ,点击 Next Next Next --> Finish 二、创建子模块 右键根目录,New --> Module 选择 “ Spring Initializr ”,点击Next 此处注意T…

ubuntu20.04配置解压版mysql5.7

目录 1.创建mysql 用户组和用户2.下载 MySQL 5.7 解压版3.解压 MySQL 文件4.将 MySQL 移动到适当的目录5.更改mysql目录所属的用户组和用户,以及权限6.进入mysql/bin/目录,安装初始化7.编辑/etc/mysql/my.cnf配置文件8.启动 MySQL 服务:9.建立…

【Linux】基本指令-入门级文件操作(三)

目录 基本指令 14 head指令 15 tail指令 管道 16 find指令 17 grep指令 18 zip&unzip指令 19 tar指令 20 su指令 总结 基本指令 14 head指令 功能:在屏幕上显示文件的内容,默认显示前10行,如果加上选项-n,则…

go测试库之apitest

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

万宾科技管网水位监测预警,管网水位的特点有哪些?

以往如果要了解城市地下排水管网的水位变化,需要依靠人工巡检或者排查的方式,这不仅加大了人员的工作量,而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况,都会降低市政府对排水管网的管理能力&a…

react_11

MobX 介绍 需求,组件0 改变了数据,其它组件也想获得改变后的数据,如图所示 这种多个组件之间要共享状态数据,useState 就不够用了,useContext 也不好用了 能够和 react 配合使用的状态管理库有 MobX Redux 其中…

Mac下使用nvm,执行微信小程序自定义处理命令失败

环境 系统:Mac OS 终端:zsh CPU:M1/ARM架构 node环境:nvm,node20 node目录:/Users/laoxu/.nvm/versions/node/v20.1.0/bin/ 问题 在使用微信小程序的自定义处理命令时,启动失败 提示找不…