如何更优雅管理API接口版本(v1/v2/v3…)

开箱即用的微服务框架 Go-zero(进阶篇) 之前我们简单介绍过 Go-zero 详见《Go-zero:开箱即用的微服务框架》。这次我们从动手实现一个 Blog 项目的用户模块出发,详细讲述 Go-zero 的使用。 特别说明本文涉及的所有资料都已上传 Github 仓库 “kougazhang/go-zero-demo”, 感兴趣的同学可以自行下载。 Go-zero 实战项目:blog 本文以 blog 的网站后台为例,着重介绍一下如何使用 Go-zero 开发 blog 的用户模块。 用户模块是后台管理系统常见的模块,它的功能大家也非常熟悉。管理用 阅读详情
AI摘要

本文探讨了在Web项目中,如何优雅地管理不同版本的API接口代码及文档,以适应需求变更和APP版本更新。提出了清晰的接口代码版本规范,包括控制器目录架构、接口路由设计,以及详细的接口文档规范,确保不同版本接口的更新和维护更为高效。

一、前言

一个web项目中,随着需求的变更或增加,API接口也会跟着变化,而如果APP发布后,已使用的接口肯定不能直接覆盖更新,需要新增升级版本接口和新的APP版本对应,因此多个版本接口更替后,如何更优雅管理不同版本接口代码,如何设计更直观的接口文档呈现给app端,这是我们后端工程师需要考虑的事情,下面总结接口版本管理经验。

二、接口代码版本规范

考虑到接口今后一定会进行版本迭代,因此一开始开发的时候,就需要对代码进行版本考量下的代码目标架构。

1. 控制器目录架构:

v1版本控制器目录:apps/controller/v1/……

v2版本控制器目录:apps/controller/v2/……

    在controller下增加子集文件夹:controller/v1/……、controller/v2/……等等,初始版本的接口全部放在v1下。

2. 接口路由设计

v1版本接口路由:/v1/login

v2版本接口路由:/v2/login

3. 不同版本控制器代码分类依据

(1)在发布APP前的所有代码,都属于v1版本代码;

(2)发布APP后,如果是新增加的需求,和已发布v1版本接口需求不冲突,新增控制器或接口,仍然属于v1版本代码;

(3)发布APP后,如果新增需求和v1已发布版本接口冲突,为了兼容老版本APP,必须在v2文件夹下新增控制器开发v2版本接口。

遵循以上分类原则,依次递推,严格区分不同版本接口代码,结合下一部分的接口文档,利于不同版本接口更新维护。

三、不同版本接口文档规范

版本迭代的接口,如果写在一起,APP真的要疯。最好能给APP一种重新开始的感觉,归零后,面对新接口,沟通起来新老接口文档区别明显,这就大大避免了无谓的撕逼。具体接口文档设计如下:

| —— 文档快捷导航

| —— 产品交互流程
    | —— v1版本
    | —— v2版本
    | —— ……

| —— 文档规范
    | —— 接口规范(接口地址,请求方式,接口参数,响应参数)
    | —— 接口文档规范
    | —— ……

| —— 开发计划

| —— 全局状态码

| —— 【v1】API文档
    | —— v1接口文档说明:包含v1接口基础地址、状态码、推送码等说明;
    | —— v1接口更新日志
    | —— 用户模块
    | —— 设备模块

| —— 【v2】API文档
    | —— v2接口文档说明:包含v2接口基础地址、状态码、推送码等说明;
    | —— v2接口更新日志
    | —— 用户模块
    | —— 设备模块
    

目录说明:
    1. 文档快捷导航:根据接口目录结构,把不同版本接口汇总到表格中,然后对应加上接口文档链接,让APP对接时更容易定位接口位置,如:

【v1】API  [文档说明(带链接)]  [更新日志(带链接)] 
路由说明
/v1/login(带指向接口文档的链接)用户登录
/v1/user/info(带指向接口文档的链接)获取用户详情
…… 
【v2】API [文档说明(带链接)]  [更新日志(带链接)] 
路由说明
/v2/login(带指向接口文档的链接)用户登录
/v2/user/info(带指向接口文档的链接)获取用户详情
…… 

    2. 全局状态码:根据接口、推送等不同板块业务需求,对不同业务下的接口设计不同数字段的状态码,遇到这样设计下的状态码,沟通或出现问题更容易定位接口,如:

       指定200为正确响应状态码,500为服务器异常响应状态码;

       其他情况下,根据业务模块区分,用户功能相关接口非正确响应状态码指定1001~1050;设备操作功能模块非正确响应状态码指定1051~1100,以此类推。

    3. 接口更新日志说明:APP对接接口前,不用记录接口更新日志;APP对接后,接口输入参数或输出参数有变化时,需记录接口更新日志,接口更新日志记录模板如下:

格式如下:

日期【年-月-日】

1. 功能模块文件夹名称:接口名称(带链接),[增加 | 减少] [必要 | 非必要] [上报 | 响应] 参数 xxx;
2. 功能模块文件夹名称:接口名称(带链接),[增加 | 减少] [必要 | 非必要] [上报 | 响应] 参数 xxx;
……


如:

2019-04-22

1. 用户模块:用户登录,增加必要上报参数type;
2. 设备模块:添加设备,增加响应参数name字段;
……

2019-04-25

1. 用户模块:用户登录,增加必要上报参数type;
2. 设备模块:添加设备,增加响应参数name字段;
……
MATLAB并行开不了的解决办法 在服务器上新安装了MATLAB 2013b,在开并行计算的时候出现了下列问题 经过在网上搜多这个问题,我感觉这个问题应该是安装的时候的验证问题或者激活不成功之类的。注意其中有一句validate the profile ‘local’ in the Cluster Profile Manager.在matlab官网上找到了设置Cluster Manager的教程,如下 parallel> 阅读详情

相关推荐

NVIDIA vGPU三种授权方式(个人玩家版)

NVIDIA vGPU三种方式搭建授权服务器(个人玩家版)

wstc2689784536的博客 8439

API 版本控制小技巧

在 Spring 项目的控制器中,有 2 个 Rest API 方法。例如 获取用户接口:/user/getUserInfo 获取权限接口:/role/getRoleList 一个客户端正在通过 /api/v1进行访问 现在想更新其中一种方法。即/user/getRoleList;因此新方法的版本将为 / api/v2 。但是 v1 的方法没有变化,即 /api/v1 。 如何在同一项目中使用两个版本处理其余方法呢? 意思是 /user/getUserInfo 接口应该同时支持 /api/v1

天行健,君子以自强不息;地势坤,君子以厚德载物。 855

告别CANoe?手把手教你用Python+PCAN搭建汽车诊断脚本(附完整代码)

本文详细介绍了如何利用Python和PCAN硬件搭建高性价比的汽车诊断自动化方案,替代昂贵的CANoe工具。通过开源库python-can和udsoncan实现UDS诊断协议,涵盖硬件选择、环境配置、核心功能实现及性能优化,附完整代码示例,助力开发者快速构建诊断脚本。

weixin_42551227的博客 373

微信支付API v2与v3的区别

jsapi 拉起支付文档 : https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml。请大家花点时间认真看下文档。指引文档,更新日志,sdk,api字典等,这些都很重要,避免在开发过程中,遇到很多不必要的麻烦。总的来说,v3支付是对v2版本的升级,不过目前来看,v3的支付对接和实现对开发者更加友好,并且支付更加安全。

书写人生 1万+

XS5018A TX ISP芯片同轴高清模拟输出图像处理芯片用户指南

当看门狗开启且系统异常,看门狗模块得不到喂狗信号时,自动产生看门狗复位信号,复位​​​​​​​。分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵校正光谱响应的交叉效。但实际上由于电路的作用,复位模块对整个芯片及各个功能模块的复位进行统一管理,负责产生各个模块的软复位信。每个区域前景色可以在 16 个色表中查找,单个区域的前景色统一,各个区域的前。较弱的坏点被放大成刺眼的白点和明显的黑点,强烈推荐开启动态坏点校正功能。四种制式,通过寄存器配置,可以很方便的实现四种制式的切换、且可以对截止。

2403_88922712的博客 1961

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱ESXI主机为192.168.20.10VCSA为192.168.20.7,后台为192.168.20.7:5480后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来。

m0_70212665的博客 5714

关于goframe2.0规范路由——路由表及文件架构

接口描述:api/v1 该目录中存放规范路由里api请求结构体与响应结构体描述文件,建议不同数据表分别写在不同文件中。图片示例如下: 控制器:controller 该目录中存放路由函数,通常的包名使用默认的controller。如下图所示: 如果有特殊用处的路由函数,可以在controller下建子目录,子目录中的文件使用另一个包名。 例如,我写的项目中发现有很多只有管理员权限才能使用的路由函数,为了方便管理,我在controller目录下建了manage子目录,将所有需要管理员权限才能使用的路由函数集

m0_47670683的博客 2149

树莓派入门教程 - 0 - 准备篇 - 0.0 SD卡制作树莓派系统镜像启动盘 开机

电脑需要提前安装的工具: sd卡格式化工具SDFormatter,官网下载链接:https://www.sdcard.org/downloads/formatter/ 镜像烧录工具Win32 Disk Imager,官网下载链接:https://win32diskimager.download/ 使用到的硬件: 一张容量大于等于16GB的TF卡 + 读卡器; 树莓派板卡。3B、3B+、4B等各型号均可,带有 HDMI接口即可。 HDMI接口的显示屏。 鼠标、键盘、电脑。 1....

Mark_md的博客 6973

微信支付APIV3统一回调接口封装(H5、JSAPI、App、小程序)

微信支付APIV3统一回调接口封装(H5、JSAPI、H5、App、小程序)

一恍过去 3万+

复现基于PYNQ-Z2的手写数字识别卷积加速器设计

来源雪天鱼。

eachanm的博客 968

乐企归集能力说明文档V2.0006

纳税人销售货物、提供服务开具的增值税发票及购进货物、接受服务取得的增值税发票、海关缴款书(含出口转内销证明)、代扣代缴完税凭证,可以通过本能力进行归集。纳税人可将本能力中的各类规则和接口嵌入本单位信息化系统中(如:销售、报销、财务等),实现发票自动化归集,便于纳税人完成发票入账、抵扣、退税以及代办退税等操作,有效提升涉税业务办理效率。

记录点滴 574

Spring Boot API 版本管理:如何优雅支持 V1/V2/V3

摘要: 本文探讨了Spring Boot项目中API版本管理的必要性及常见方案。随着业务迭代,API变更需兼容旧版本客户端,避免线上故障。文章分析了四种主流方案:1)路径加版本号(简单直观);2)请求参数控制(适合小项目);3)请求头控制(优雅但调试复杂);4)网关分流(适合大型系统)。建议根据项目规模选择组合策略,如路径+请求头双保险,并强调与Swagger集成、版本下线计划及兼容性测试的重要性。核心原则:小项目用路径版本,大系统采用请求头+网关实现平滑迭代。

月色真美 风也温柔 942

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 解决思路 发生未知错误。 解决方法 很可能是因为当前电脑下载的cuda版本不适合当前电脑GPU支持的cuda版本! 推荐文章:CV:Win1..

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 7525

Spring Boot API 版本管理:如何优雅支持 V1/V2/V3?

不要无限制增加版本一般最多同时维护 2~3 个版本。旧版本要设定下线计划,否则项目会被历史包袱拖死。文档和版本必须强绑定不要让前端去“猜”返回字段,一定要在 Swagger 或 API 文档里明确标注每个版本的差异。做好兼容性测试可以在 CI/CD 流程里加自动化测试,验证 V1/V2/V3 是否都能正常工作。与网关结合灰度发布新版本先放到部分用户,验证没问题后再全量上线。避免因为新版本 bug 一次性把所有客户端搞崩。Spring Boot 里做 API 版本管理,并没有唯一标准答案。路径加版本号。

m0_65592409的博客 1031

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

如何优雅的设计 Spring Boot API 接口版本号

一般来说,系统上线以后,需求仍会发生变动,功能也会迭代更新。可能是接口参数发生变更,也有可能是业务逻辑需要调整,如果直接在原来的接口上进行修改,必然会影响原有服务的正常运行。 常见的解决方案,是在接口路径中加入版本号用于区分,此外还可以在参数甚至 header 里带上版本号。这里以在请求路径中带上版本号为例,如:http://IP:PORT/api/v1/test ,v1 即代表的是版本号。当然了...

happyJared 4975

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

为什么B2 Command Line Tool有b2、b2v3和b2v4:ApiVer接口版本管理机制完整解析

B2 Command Line Tool 是 Backblaze B2 云存储的官方命令行工具,安装后你会发现它同时提供了 `b2`、`b2v3`、`b2v4` 三个命令——这正是它独创的 **ApiVer 接口版本管理机制**在起作用。本文带你快速看懂这三个命令的区别、底层实现原理,以及作为新手到底该用哪一个。 ## 🧩 一次安装,三个命令?先搞清入口关系 通过 pip 安装 B2 Com

gitblog_00205的博客 1025

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【JavaWeb】一分钟让你学会如何更优雅管理API版本

**1. 接口变动非常大或者整个产品大版本发布** - 此种情况下可以采用URL自带版本的方式,创建新的Controller,甚至部署新的应用服务和nginx。**URL中无版本号**即走`默认`逻辑。 **2. 常规的版本升级和BUGFIX** - 一般情况下使用`HTTP Header`中指定的版本号,在`代码逻辑`中进行判断就可满足需求**。Header中无版本号**即走`默认`处理逻辑`。 **3. 两种模式同时使用** - URL自带模式用来处理`大版本变动`,当大版本已经升级完成,后续的小需

墩墩分墩 1428

yansongda/pay版本升级指南:从v2到v3平滑迁移终极教程

想要将你的支付系统从yansongda/pay v2升级到v3吗?这份完整的升级指南将帮助你顺利完成迁移过程,享受新版带来的性能提升和功能增强!🚀 ## 💡 为什么需要升级到v3版本? yansongda/pay v3版本带来了诸多改进,包括: - 更好的多租户支持 - 微信支付v3 API全面支持 - 更优雅的配置管理 - 性能优化和内存占用减少 ## 📋 升级前准备清单 在开始升

gitblog_00404的博客 1080

Karmada v1.3:更优雅 更精准 更高效

最新发布的1.3版本中,Karmada重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服)。

华为云官方博客 1320

SpringBoot优雅开发REST API

SpringBoot接口版本控制、SpringBoot开发API、接口动态版本号、参数校验、@validated注解、Controller统一异常拦截、@RestControllerAdvice注解、参数处理、Swagger使用方法、接口文档

糖拌西红柿 2211

【分享】来试试优雅的管理和对比API接口版本

一、前言 一个项目中,随着需求的变更或增加,API接口也会跟着变化,而如果项目发布后,已使用的接口肯定不能直接覆盖更新,需要新增升级版本接口和新的版本对应,因此多个版本接口更替后,如何更优雅管理不同版本接口代码,如何设计更直观的接口文档呈现给前端,这是后端工程师需要考虑的事情,下面分享一些接口版本管理的经验。 二、接口代码版本规范 考虑到接口今后一定会进行版本迭代,因此一开始开发的时候,就需要对代码进行版本考量下的代码目标架构。 1. 控制器目录架构 在controller下增加子集文件夹:con

API 508

注解版:如何优雅的设计 Restful API 实现 API 版本控制!

一、为什么加版本号 一般来说,api 接口是提供给其他系统或是其他公司使用,不能随意频繁的变更。然而,需求和业务不断变化,接口和参数也会发生相应的变化。如果直接对原来的接口进行修改,势必会影响线其他系统的正常运行。这就必须对api 接口进行有效的版本控制。 例如,添加用户的接口,由于业务需求变化,接口的字段属性也发生了变化而且可能和之前的功能不兼容。为了保证原有的接口调用方不受影响,只能重新定义一个新的接口。 http://localhost:8080/api/v1/user http://loca

weixin_39255905的博客 9547

如何优雅地处理 API 版本控制?

API 版本控制的本质是同时管理多个 API 版本。这使你可以推出新功能或修复旧问题,而不会影响仍在使用旧版本的用户。可以把它想象成一个产品推出了新的口味,但老口味依旧保留——让每一位用户都满意!例如,当你对 API 做了重大更改时,不需要强迫所有用户马上升级,你可以发布一个新版本(比如 v2),同时保留旧版本(v1)。API 版本控制的本质,是让用户有选择权。你可以不断优化和更新 API,同时确保现有用户依然可以安心使用旧版本。只要你提前规划、透明沟通、优雅弃用,再结合像APIPost。

Kairo_01的博客 873

实用:优雅设计接口版本号

一般来说,系统上线以后,需求仍会发生变动,功能也会迭代更新。可能是接口参数发生变更,也有可能是业务逻辑需要调整,如果直接在原来的接口上进行修改,必然会影响原有服务的正常运行。 常见的解决方案,是在接口路径中加入版本号用于区分,此外还可以在参数甚至 header 里带上版本号。这里以在请求路径中带上版本号为例,如:http://IP:PORT/api/v1/test ,v1 即代表的是版本号。当然了,可以像这样,直接写死在 @RequestMapping(“api/v1/test”)属性中,不过下面提供了更为

ZERO 2053

Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!...

前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口。不清楚的可以看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。 有些人可能会问,为什么我看到很多公司的api接口文档里面,都有/api/v1/ 这样的地址呢?其实,/api 就是为了...

章为忠的专栏 1900

Dotnet Core多版本API共存的优雅实现

API升级,新旧版本的API共存,怎么管理呢? 一、前言最近,单位APP做了升级,同步的,API也做了升级。升级过程中,出现了一点问题:API升级后,旧API也需要保留,因为有旧的APP...

dotNET跨平台 746
上一篇: Mysql基础命令 —— 数据库、数据表操作
下一篇: 全球项目多区域数据同步问题解决方案
追风2019
博客等级 码龄11年 846粉丝 117原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值