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

API开发的版本控制技巧

《API开发的版本控制技巧》

在设计和构建API时,API的版本控制是非常重要的。
必须确保新API对于现有的API不会造成破坏。
首先,也是最重要的,可以把版本号放入API的URL中。这样可以把主要版本更新放入API。比如,我们在调用CHUser Center API时,可以在URL中使用/api-v1或/api-v2来指出所使用的API版本。这是很常见的做法。

在API版本控制中,还有一点也很重要。希望API能支持次要版本的更新。次要版本更新所造成的变化仍然会影响接口,因此有可能会影响当前API的使用者,但它们与主版本的URL和API的基本功能都在变化不同,URL和API基本功能仍然是相同的。比如在CHUser Center API,次要版本的修改是通过客户在API调用时发起请求的HTTP头部做指定的。
头部的版本元素看起来是这样的:
Element-Version: 1

再举一个API次要版本更新的例子,如果我们想修改响应的JSON字段的名称。假设我们有一个名为GET /people的API调用,它会返回以下JSON数据:

{
  “firstN”: “foo”
}

我们决定把JSON字段中的firstN改成firstName。很显然,这只是一个小改动,所以它属于API次要版本更新的范畴,无须做主版本的修改和不同的URL签名。因此,我们会创建另一个GET /people接口,要调用它还需要在HTTP头部加上
Element-Version: 2
然后就会返回以下JSON数据:

{
  “firstName”: “foo”
}

在CHUser Center API中,当一个新用户注册后,我们会设置此用户的HTTP头部默认为CHUser Center上最新的Elements-Version版本。这可以保证新用户总是使用我们提供的最新API服务,这样就无须在每次API调用时指定任何HTTP头部元素了。当然,也可以手动指定版本。

相关文章:

  • Android 强烈推荐:程序员接私活那点事
  • ProgressDialog使用总结
  • Apache 配置文件解析及虚拟机配置示例
  • 实现TeX的算法:回首编程技术的过去三十年
  • NodeJS几个值得学习的开源框架
  • Zipkin-1.19.0学习系列6:applyInitializers(context);
  • 1078: 输入入门(3)
  • iptables 用法
  • SVN Cleanup failed to process the following paths错误的解决
  • LoadRunner监控Linux
  • HP Unix openssl、openssh 升级
  • php源码编译安装时的一些常见错误解决办法
  • 2006年教育部对社会主义倒奶和资本主义倒奶的的标准回答
  • 微信小程序使用三元运算符代替wx:if
  • 目标检測的图像特征提取之(一)HOG特征
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular2开发踩坑系列-生产环境编译
  • crontab执行失败的多种原因
  • CSS 三角实现
  • download使用浅析
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Mithril.js 入门介绍
  • node 版本过低
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring框架之我见(三)——IOC、AOP
  • Unix命令
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 构造函数(constructor)与原型链(prototype)关系
  • 理清楚Vue的结构
  • 聊聊flink的TableFactory
  • 前嗅ForeSpider采集配置界面介绍
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 实现菜单下拉伸展折叠效果demo
  • 温故知新之javascript面向对象
  • 关于Android全面屏虚拟导航栏的适配总结
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #vue3 实现前端下载excel文件模板功能
  • #单片机(TB6600驱动42步进电机)
  • #每天一道面试题# 什么是MySQL的回表查询
  • #在 README.md 中生成项目目录结构
  • (ros//EnvironmentVariables)ros环境变量
  • (二)WCF的Binding模型
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (三)mysql_MYSQL(三)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .net core 6 redis操作类
  • .Net Core与存储过程(一)
  • .NET 常见的偏门问题
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net生成的类,跨工程调用显示注释
  • @cacheable 是否缓存成功_Spring Cache缓存注解