ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

API 版本控制

2021-06-05 10:01:39  阅读:121  来源: 互联网

标签:版本控制 cn api 模式 API 版本 test


背景

​ 在常规的业务开发中假设我们的接口提供给客户端同时提供移动端应用,但是在产品迭代的过程中客户端迭代速度更快需要将部分接口结构更新原来的接口又不得不升级,但是移动端还是保持原来接口结构。遇到类似的情况我们可以考虑使用 API 版本控制

API 版本控制模式

常用的API版本控制模式有以下三种:

  • 无版本模式
  • API 自带版本模式
  • 兼容性版本模式

无版本模式

使用这种模式意味着服务端每个 API 只提供一个版本,如果 API 升级结构调整所有调用方都需要同步更新 API 结构,任何 API 的修改可能都会影响到所有用户

API 自带版本模式

该模式下同一个名称 API 可以建立多个版本,API 调用方会根据自己的需求选择使用对应的API版本。新版本和旧版本同时存在,即使用户使用是旧版版也不会受到影响

兼容性版本模式

每个 API 只有一个版本,API 需要兼容以前老版本 API 的功能,所有版本用户都调用同一个版本 API,通过内部兼容的方式实现新旧版本 API 互相兼容

版本控制实现

无版本模式实现方案

  1. 新功能直接在旧 API 上修改,API 修改部分同步给客户端强制客户端一起升级(热更新),在用户体验会受到一定影响

  2. 更换 API 名称,新功能使用新的 API 名称,新版本客户端调用使用新 API 名称

    // old
    http://test.mesh.cn/api/user/login
    
    // new
    http://test.mesh.cn/api/user/newLogin
    

API 自带版本模式实现方案

  1. 在 URI 上添加版本号,URI 中直接标记使用那个版本,如果URI不携带版本号默认使用最新版本

    // old
    http://test.mesh.cn/api/user/login
    
    // new
    http://test.mesh.cn/api/v2/user/login
    
  2. 参数携带版本号,即在每个 API 请求后添加一个 version 参数表示请求是那个版本

    // old
    http://test.mesh.cn/api/user/login
    
    // new
    http://test.mesh.cn/api/user/login?version=2
    

兼容性版本模式实现方案

该模式是基于版本模式下的改进方案,将版本信息从 API 中隐藏

  1. 通过HTTP头部做版本指定

    在处理 API 时,服务端根据 API 调用方在 request header 中设置的 api-version 来判断,进而执行不同的逻辑处理。

    // request header info
    GET http://test.mesh.cn/api/user/login
    api-version: v1
    
  2. 通过客户端 token 进行判断

    客户端与服务端交互时,都会携带一个附加的 releaseToken字段,服务端可以根据这个 token 去判断对应 API 版本(releaseToken 与版本映射)

基于 API 版本控制还有许多其他方案,没有一个完美的方案可以适用于任何场景,在实际处理问题时我们还是需要根据具体问题具体分析。

标签:版本控制,cn,api,模式,API,版本,test
来源: https://blog.csdn.net/DanielJackZ/article/details/117586893

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有