接口文档设计避坑指南

news2024/9/22 3:46:21

我们做后端开发的,经常需要定义接口文档

最近在做接口文档评审的时候,发现一个小伙伴定义的出参是个枚举值,但是接口文档没有给出对应具体的枚举值。其实,如何写好接口文档,真的很重要。今天田螺哥,给你带来接口文档设计的12个注意点~

1. 你的接口名称是否清晰?

换句话说,你的接口是做什么的,是否易懂清晰?一般接口url也要求能看得出接口的作用。比如说,查询用户信息(queryUserInfo),就是一个不错的接口名称

2. 你的接口地址是否完整

接口的地址,也叫接口的URL地址。即别人调用你的接口,用的是什么URL。比如/api/user/queryUserInfo就是一个接口地址。但是,我想说的是,这还不是一个完整的接口地址。你的接口是不是HTTP调用呢?

如果是HTTP调用的话,域名是什么呢?端口呢。一个好的http接口地址,应当是这样的:

https//tianluo.com:15000/api/user/queryUserInfo

3.你的接口请求方式是否正确

接口请求方式通常有以下几种:

  • GET:从服务器获取资源,可以在URL中传递参数,通常用于查询数据。

  • POST:向服务器提交数据,通常用于新增、修改、删除等操作。

  • PUT:向服务器更新资源,通常用于更新数据。

  • DELETE:从服务器删除资源,通常用于删除数据。

  • PATCH:向服务器局部更新资源,通常用于修改部分数据。

  • HEAD:类似于GET请求,但是只返回响应头,不返回实体内容,通常用于获取资源的元信息。

  • OPTIONS:请求服务器返回支持的请求方式等信息,通常用于客户端与服务端协商请求方式。

你定义接口文档的时候,需要写清楚,你的接口请求方式是哪一个?一般情况下,我们用POST和GET比较多。也有些公司的所有接口都用POST请求。

4.请求参数的8大要素

我们定义接口的时候,请求参数是最主要的部分之一。一份合格的接口文档,请求参数应当包含这八大要素:

  • 参数名: 参数的名字,都是驼峰命名,比如userId

  • 类型: 参数的类型,比如String、Integer等。

  • 是否必填: 请求参数是不是必填的,如果要求必填的,当上游不传这个参数的时候,应当抛参数校验异常。

  • 默认值: 如果这个参数不传,是否有默认值,默认值是多少。

  • 取值范围: 如果是Long,Integer等数值类型的话,这个就是一个范围值,比如1~10,如果是枚举值的话,那就是枚举范围,比如ACTIVE、INACTIVE

  • 参数格式:比如你的参数是个日期的话,就需要说明参数格式,如yyyyMMdd

  • 入参示例值: 提供该响应参数的示例值,以便开发人员更好地理解和使用该参数。

  • 备注: 如果这个入参字段有特殊说明的话,可以在这一栏说明。如果没有特殊说明,那只描述这个参数作用也可以。

以下就是入参的文档样例

参数名类型是否必填默认值取值范围参数格式入参示例值备注(说明)
userIdLong0L0~99999999L666L用户Id
birthDayString1990010119900101~20231231yyyyMMdd19940107用户生日

5.响应参数的7大要求

响应参数其实跟入参差不多,有7种要素:

  • 参数名称:描述该响应参数的名称。

  • 参数类型:描述该响应参数的数据类型,如String、Integer等。

  • 参数格式:描述该响应参数的数据格式,如yyyy-MM-dd、HH:mm:ss等。

  • 参数说明:对该响应参数的含义进行详细的描述。

  • 取值范围:描述该响应参数的取值范围,如整数范围、字符串长度等。

  • 是否必填:描述该响应参数是否为必填项。

  • 示例值:提供该响应参数的示例值,以便开发人员更好地理解和使用该参数。

不一样的地方是,响应参数,一般都是按照code,msg,data的格式返回的:

{
    "code": 0,
    "message": "success",
    "data": {
        "name": "Tom",
        "age": 20,
        "gender": "男"
    }
}

6. 接口错误码

一份好的接口文档,一定少不了错误码列举。一般错误码定义包括三列:错误码、错误码信息、含义

错误码错误信息含义
1001参数错误请求参数不合法
1002用户不存在根据给定的用户ID没有找到对应的用户信息
1003数据库错误数据库访问出错

7.接口安全

定义接口文档时,对于一些需要保护的接口,也需要考虑接口的安全,例如权限管理、防止 SQL 注入等。

因此,接口文档应当包含接口的安全性说明:例如接口的访问授权方式、数据传输加密方式等。此外,接口文档还应该对于敏感数据和操作进行标注,方便使用者注意隐私和安全问题

8. 接口版本管理

在接口文档定义时,接口版本管理是非常重要的一个方面。由于软件项目的迭代和升级,接口可能会随着版本的变化而发生变化。为了避免接口变化给用户带来不必要的困扰,需要对接口进行版本管理。

以下是一些常用的接口版本管理方法:

  • 在接口文档中明确版本号:在接口文档中明确标识接口的版本号,例如在接口地址中添加版本号信息,如https://example.com/api/v1/user,表示该接口的版本号为v1

  • 使用语义化版本号:采用语义化版本号(Semantic Versioning)规范,即版本号格式为X.Y.Z,其中X表示主版本号、Y表示次版本号、Z表示修订号。当进行兼容性变更时,需升级主版本号;当增加功能且不影响现有功能时,需升级次版本号;当进行bug修复或小功能改进时,需升级修订号。

  • 增量发布:在接口发生变化时,先发布新版本的接口,同时保留旧版本的接口。用户可以根据自己的需求来选择使用哪个版本的接口。随着新版本的接口逐步替换旧版本的接口,最终可以将旧版本的接口废弃。

无论采用何种方法,接口版本管理都应该得到充分的考虑。在接口版本变化时,需要及时更新接口文档(详细描述版本的变化、兼容性问题、版本切换方式等),以确保用户能够获得最新的接口信息。

9. 维护接口文档更新迭代

如果接口发生了变更,比如参数有哪些变更,错误码变更等等,都需要维护到文档上。同时需要登记变更的记录

日期变更描述操作人
2023-04-16创建接口文档,定义了第一版接口文档捡田螺的小男孩
2023-04-18修改接口文档,增加了错误码,出参等田螺哥

10.明确请求头有哪些

接口文档,是需要写清楚的请求头的。接口文档的请求头可以看到以下的信息:

  • Content-Type:指定请求体的数据格式,如application/json、application/x-www-form-urlencoded、multipart/form-data等。

  • Authorization:用于身份验证的令牌信息,如Token、Bearer等。

  • Accept:指定客户端可以接受的响应数据格式,如application/json、text/html等。

  • User-Agent:指定客户端的类型和版本信息,可以用于服务端进行针对性优化。

  • Accept-Encoding:指定客户端可以接受的数据压缩格式,如gzip、deflate等。

  • Cache-Control:指定客户端缓存的策略,如no-cache、max-age等。

  • Cookie:包含客户端发送给服务器的cookie信息。

这是是一个接口文档的请求头的示例:

POST /api/user HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Accept: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Accept-Encoding: gzip, deflate, br
Cache-Control: no-cache
Cookie: _ga=GA1.2.1234567890.1234567890; _gid=GA1.2.0987654321.0987654321
If-None-Match: W/"2a-3TjT7VaqgkT1nJdKjX9Cpijp2FA"
Referer: https://example.com/login
Origin: https://example.com
Content-Length: 43

{"name": "John Doe", "age": 25, "email": "john.doe@example.com"}

11 接口请求示例

接口文档,需要提供接口的使用案例:以方便开发者理解接口的使用方法和调用流程

12. 接口测试

一般来说,接口文档需要完善:接口测试的方法和测试结果,以便用户可以测试接口是否符合自己的需求,让用户用得放心~哈哈

原文:接口文档设计的12个注意点

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

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

相关文章

Vue学习笔记(4. 生命周期)

1. 生命周期写法(vue2与vue3比对) 创建前:vue3 setup, vue2 beforeCreate //组件创建前执行的函数 创建后:vue3 setup, vue2 created //组件创建后执行的函数 挂载前:vue3 onBeforeMount, vue2 beforeMount //挂…

FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization

FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization 论文地址:https://arxiv.org/pdf/2303.14189.pdf 概述 本文提出了一种通用的 CNN 和 Transformer 混合的视觉基础模型 移动设备和 ImageNet 数据集上的精度相同的前提下&#xf…

SpringBoot自动配置原理分析

前言: 虽然工作中一直使用的是自研的一款基于spring的框架,但是随着springboot在各公司的广泛使用,公司的一些新项目也开始逐渐使用springBoot了,那么springBoot的一些特性就要仔细学习一下了。 什么是自动配置? 还记…

【牛客刷题专栏】0x21:JZ20 表示数值的字符串(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…

Voice Control for ChatGPT 轻松实现使用语音与ChatGPT进行对话。

缘由 日常生活中,我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的,毕竟相对于文字来说语音就不会显的那么的苍白无力,同时最大的好处就是能解放我们的双手吧,能更快实现两者间的对话,沟通便更高效了。Voice Co…

【瑞吉外卖】002 -- 后台登录功能开发

本文章为对 黑马程序员Java项目实战《瑞吉外卖》的学习记录 目录 一、需求分析 1、页面原型展示 2、登录页面展示 3、查看登录请求信息 4、数据模型 二、代码开发 1、创建实体类Employee,和employee表进行映射 2、创建包结构:(Controller、Se…

基于TCP协议的Socket通信

上节中我们给大家接触了Socket的一些基本概念以及使用方法,相信大家对Socket已经有了初步的掌握。本节我们学习使用Socket来实现大文件的断点续传!在这里我们以他人的案例进行讲解,这是别人写好的一个Socket上传大文件的例子,不要…

TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11

原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的…

MySQL(表的增删改查)

文章目录 0. 前言1. Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩…

【消息队列】聊一下Kafka多线程消费实例

Kafka Java Consumer设计原理 目前市面上大多数计算机都采用多核CPU来提升系统的处理性能,但是如果在程序开发层面使用单线程的话,那么必定不能完全发挥出系统的真实性能,而kafka Consumer就是单线程的。而这个只是针对于消费消息这个层面来…

【AI热点技术】ChatGPT开源替代品——LLaMA系列之「羊驼家族」

ChatGPT开源替代品——LLaMA系列之「羊驼家族」 1. Alpaca2. Vicuna3. Koala4. ChatLLaMA5. FreedomGPT6. ColossalChat完整的 ChatGPT 克隆解决方案中英双语训练数据集完整的RLHF管线 相关链接 现在如果问什么最火,很多人第一反应肯定就是ChatGPT。的确&#xff0c…

Redis集群模式下使用config set 命令所有节点都会生效吗?

Redis集群模式下使用config set 命令所有节点都会生效吗? 问题: Redis集群模式下使用config set 命令所有节点都会生效吗? 实践检验真理: 前置准备 Redis版本:5.0.5版本 Redis集群模式:三主三从 操作步骤: 分别连接7001节点与7002节点,准备在7001节点使用”config get”…

交友项目【查询好友动态,查询推荐动态】实现

目录 1:圈子 1.1:查询好友动态 1.1.1:接口分析 1.1.2:流程分析 1.1.2:代码实现 1.2:查询推荐动态 1.2.1:接口分析 1.2.2:流程分析 1.2.3:代码实现 1&#xff1a…

Python教程:如何用PIL将图片转换为ASCII艺术

Python教程:如何用PIL将图片转换为ASCII艺术 ASCII 艺术是一种将图像转换为由字符组成的艺术形式。Python 是一种灵活而强大的编程语言,可以使用它来将图片转换为 ASCII 艺术。本文将介绍如何使用 Python 和 PIL 库来实现这一功能。 文末有完整代码 效…

数学建模第一天:数学建模先导课之MATLAB的入门

目录 一、MATLAB的简介 二、Matlab基础知识 1. 变量 ①命名规则 ②特殊变量名 2、数学符号与函数调用 ①符号 ②数学函数 ③自定义函数 三、数组与矩阵 1、数组 ①创建数组 ②访问数组元素 ③数组运算 2、矩阵 ①定义 ②特殊矩阵 ③矩阵运算 四、控制流 …

若依项目springcloud启动

若依项目springcloud启动 参考:http://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html 1、概述 1.1、学习前提 熟练使用springboot相关技术了解springcloud相关技术电脑配置可以支持 1.2、需要的配置 JDK > 1.8 (推荐1.8版本) Mysql > 5.7.0 (推荐5.7版…

若依数据隔离 ${params.dataScope} 替换 优化为sql 替换

若依数据隔离 ${params.dataScope} 替换 优化为sql 替换 安全问题:有风险的SQL查询:MyBatis解决 若依框架的数据隔离是通过 ${params.dataScope} 实现的 但是在代码安全扫描的时候$ 符会提示有风险的SQL查询:MyBatis 所以我们这里需要进行优化参考: M…

凌恩生物文献分享|IF31.316→一网打尽与婴儿疾病相关的病毒组研究

期刊:Cell Host & Microbe 影响因子:31.316 发表时间:2022年4月 研究团队:清华大学医学院梁冠翔课题组与宾夕法尼亚大学医学院Frederic Bushman课题组 一、研究背景 已知微生物为人类提供营养物质和代谢物&…

AD、PADS、Cadence各有什么优势?

读者中有很大一部分是电子工程师,先想问下大家:你们画PCB常用什么软件? **函第一的AD? 还是最贵Cadence(Allegro)? 看到有读者在问:AD、PADS、Cadence各有什么优势? 这里就简单分…

一文吃透Java线程池——实现机制篇

前言 本篇博客是《一文吃透Java线程池》系列博客的下半部分。 上半部分链接:一文吃透Java线程池——基础篇 实现机制(源码解析) 根据前面的学习,我们知道,线程池是如下的运作机制 解析: 一开始&#…