火爆!大厂流出的接口版本号规约,速度收藏

news2025/1/11 0:55:37

火爆!大厂流出的接口版本号规约,速度收藏 - 程序员古德

在实际项目开发中,API的版本号控制不仅仅是一个数字游戏,它的使用需遵循语义版本控制(Semantic Versioning)原则,确保代码的每一次更改都能通过版本号的变化得到准确的体现,本篇文章对版本号如何使用做了详细的解释。

版本号的构成

火爆!大厂流出的接口版本号规约,速度收藏 - 程序员古德

版本号通常由三部分构成,主要版本号(Major Version)、次要版本号(Minor Version)和补丁号(Patch Version),这三者组合在一起,形成了一个完整的版本号,如:1.0.0

  1. 主要版本号(Major Version),它是版本号中的第一个数字。当对 API 做出不兼容的更改时,主要版本号应当增加,不兼容的更改指的是会破坏依赖于此 API 的代码的更改,例如,删除了一个函数或更改了某个函数的签名,这都可能导致其他使用此库的代码无法正常工作,在这种情况下,需要将主要版本号增加,比如从 1.0.0 变更到 2.0.0
  2. 次要版本号(Minor Version),它是版本号中的第二个数字,当以向后兼容的方式添加新功能时,应增加次要版本号,这意味着添加的新功能不会破坏现有代码,但可能会为开发者提供新的使用方式,例如,如果添加了一个新的函数或模块,但没有更改现有 API 的行为,那么可以将次要版本号增加,比如从 1.0.0 变更到 1.1.0
  3. 补丁号(Patch Version),它是版本号中的第三个数字,当做出向后兼容的错误修复时,应增加补丁号,错误修复通常包括修复 bug、提高性能或改进文档等,这些更改不会引入新的功能,也不会破坏现有 API,例如,如修复了一个导致程序崩溃的 bug,但没有添加新功能或更改 API,那么可以将补丁号增加,比如从 1.0.0 变更到 1.0.1

实际应用举例

火爆!大厂流出的接口版本号规约,速度收藏 - 程序员古德

假设正在开发一个API库,该库提供了一系列公共函数供其他开发者使用,在版本 1.0.0 中,该库已经稳定并被广泛使用,然而,随着时间的推移,发现其中一个函数的设计不佳,并决定在下一个版本中删除它,由于这将破坏依赖于该函数的代码,因此需要按照语义版本控制的规则,将版本号更新为 2.0.0,以表明这是一个包含破坏性更改的新版本。

2.0.0 版本发布后,收到了一些用户的反馈,他们希望库能够提供更多功能,于是,添加了一个新的函数来满足这一需求,由于这个新函数是向后兼容的,不会破坏现有代码,因此只需将次要版本号增加,将版本更新为 2.1.0

2.1.0 版本发布后不久,发现了一个潜在的性能问题,并决定修复它,由于这个修复是向后兼容的,并且没有引入新功能,只需增加补丁号,将版本更新为 2.1.1

通过遵循语义版本控制的规则,能够清晰地传达每一次版本更新所带来的影响,帮助用户和开发者更好地管理他们的依赖和升级策略。

在 Rust 项目中,版本号不仅仅是一个简单的数字序列,它背后遵循的是一套严谨的规则,即语义版本控制(Semantic Versioning)。这种规则确保了代码的每一次变更都能通过版本号得到准确的体现,为开发者和用户提供了清晰的版本迭代信息。

版本号的进阶应用

当深入了解版本号的应用,会发现除了主要版本、次要版本和补丁版本这三个基础组成部分外,版本号在 Rust 以及其他编程语言中还有着更为丰富的用途和格式。

1、预发布版本标识,在软件开发周期中,经常会有这样的阶段,代码已经完成了一部分新功能或修复,但还未经过充分的测试或验证,不适合作为稳定版本发布,这时,就可以使用预发布版本号来标识这样的版本,预发布版本号通常在标准版本号后面添加一个额外的标签,如 1.0.0-alpha1.0.0-beta,其中,alpha 通常表示软件还在早期开发阶段,可能存在较多的问题;而 beta 则表示软件已经接近完成,但仍需要进一步的测试。通过使用预发布版本号,开发者可以提前将新版本提供给一部分用户进行测试,收集反馈,以便在正式发布前做进一步的调整。

2、构建元数据,有时候,可能需要在版本号中包含一些额外的信息,比如构建的日期、时间戳、构建机器的信息等,这些信息对于追踪软件的构建历史和定位问题非常有帮助。在语义版本控制中,可以在版本号后面添加元数据,如 1.0.0+20130313144700。这里的 + 符号后面的部分就是元数据,它不会影响版本的优先级比较。元数据通常以某种特定的格式编码,以便在需要时能够方便地解析和使用。

3、日期版本号,在某些场景下,尤其是持续集成和持续部署(CI/CD)的环境中,可能希望版本号能够直接反映出软件的构建日期或时间戳,日期版本号通常以 YYYYMMDD.N 的格式表示,其中 YYYYMMDD 是构建日期,N 是当天内的构建序号。例如,20210930.1 就表示是 2021 年 9 月 30 日的第一次构建,通过日期版本号,可以快速地了解到软件的构建时间和迭代速度,从而更好地管理软件的发布和更新。

总的来说,版本号的这些额外用法提供了更多的信息和灵活性,帮助维护者和用户更好地理解软件的发布状态、迭代速度和构建历史。在实际的项目中,可以根据需求选择适合的版本号格式和用法,以便更好地满足项目的需求和管理要求。

版本号管理的误区与正确实践

火爆!大厂流出的接口版本号规约,速度收藏 - 程序员古德

在软件开发中,版本号管理是一项至关重要的任务,它不仅能够反映软件的迭代历程,还能帮助团队成员和用户更好地了解软件的变更情况,然而,在实际操作中,很多开发者会不自觉地陷入一些版本号管理的误区,接下来,将通过一些实例来说明这些误区,并给出正确的做法。

误区一,不一致的命名规范

1、错误示范

假设项目从 1.0.0 版本开始,但在接下来的开发过程中,由于种种原因,跳过了 1.0.11.0.2 等版本,直接发布了 1.0.5,这样的命名方式会给用户造成困扰,因为他们无法从版本号中准确地判断出软件经历了多少次更新。

2、正确做法

每次对软件进行更改后,都应该按照语义版本控制的规则递增相应的版本号,例如,如果修复了一个小bug但没有添加新功能,那么应该将补丁版本号递增,如从 1.0.0 更新到 1.0.1,这样可以确保版本号的连续性和一致性。

误区二:跳跃式版本更新

1、错误示范

有时,开发者在仅修复了一个小bug或进行了一些微小的改动后,就将主版本号或次版本号进行了大幅的跳跃。例如,从 1.0.0 直接更新到 2.0.0。这样的做法会给用户带来困惑,因为他们无法准确地判断出新版本是否包含了重大的变更。

2、正确做法

根据变更的性质来决定版本号的更新幅度,如果修复的是bug或进行的是一些非破坏性的改动,那么应该只递增补丁版本号,只有当添加了新功能或进行了破坏性的更改时,才需要递增主版本号或次版本号。

误区三:复杂或模糊的预发布标签

1、错误示范

在软件开发过程中,预发布版本(如alpha版、beta版等)是常见的。然而,有些开发者在命名预发布版本时使用了过于复杂或模糊的标签,如 1.0.0-alpha-beta-rc。这样的命名方式不仅难以理解,还容易引发混淆。

2、正确做法

使用清晰、简洁的标签来命名预发布版本,例如,可以使用 1.0.0-alpha 来表示alpha版,使用 1.0.0-beta 来表示beta版,如果需要进一步区分不同的预发布版本,可以在标签后添加数字或日期等信息,如 1.0.0-alpha11.0.0-beta-20230718

误区四:不记录更改

1、错误示范

在发布新版本时,有些开发者忽略了提供更新日志或文档说明的重要性,这导致用户在更新软件后无法准确地了解到哪些内容发生了变化,从而增加了使用风险。

2、正确做法

每次发布新版本时,都应该提供详细的更新日志或文档说明,这些文档应该清晰地列出新版本中新增的功能、修复的bug以及任何破坏性的更改,通过提供这些信息,可以帮助用户更好地了解软件的更新情况,并做出相应的决策。

误区五:后退版本号

1、错误示范

有些开发者在发布新版本后,由于某些原因(如发现严重bug),决定回退到之前的版本,然而,在回退时,他们错误地使用了比之前版本更低的版本号。例如,在发布了 1.1.0 版本后,下一个版本命名为 1.0.1。这样的做法会导致版本号的混乱和不一致。

2、正确做法

即使需要回退到之前的版本,也应该确保每个新版本的版本号都高于之前的版本号,如果需要撤销某个版本的更改,可以通过发布一个新的补丁版本来实现,而不是直接回退到之前的版本,例如,如果在 1.1.0 版本中发现了严重bug,可以发布一个 1.1.1 版本来修复这个bug,而不是回退到 1.0.1 版本。

误区六:过度精细的版本控制

1、错误示范

有些开发者过于追求版本控制的精细度,每修复一个非常小的bug或进行微小的改动就发布一个新版本。例如,从 1.0.01.0.1,再到 1.0.2,每个版本之间只有微小的差异。这样的做法不仅增加了版本管理的复杂性,还可能给用户带来不必要的困扰。

2、正确做法

对于小修复或微小的改动,可以积累一定数量后再统一更新版本号。例如,可以在修复了几个小bug或进行了一些微小的优化后,再发布一个新版本。这样可以保持版本号的简洁性和易读性,同时减少用户的更新频率和成本。

关注我,每天学习互联网编程技术 - 程序员古德

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

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

相关文章

八款常用uml用例图-画图干货

随着软件开发和系统设计的复杂度不断提升,UML已经成为业界标准。UML用例图作为其中一种重要图表,能够清晰地展示系统功能和用户需求。本文将为你介绍八款常用的UML用例图,助你轻松搞定画图难题! 一、费用报销系统UML用例图 二、登…

使用vite框架封装vue3插件,发布到npm

目录 一、vue环境搭建 1、创建App.vue 2、修改main.ts 3、修改vite.config.ts 二、插件配置 1、创建插件 2、开发调试 3、打包配置 4、package.json文件配置 上一篇文章讲述使用vite《如何使用vite框架封装一个js库,并发布npm包》封装js库,本文将…

Qt中QGraphicsView架构下实时鼠标绘制图形

上一章节介绍了关于QGraphicsView的基础讲解,以及简单的类图创建,由上一章节中最后展示的动画效果来看,今年主要讲述如何在QGraphicsView架构下,实时拖动鼠标绘制图形! 今天主要以矩形为例,再来看一下展示…

通过浏览器URL地址,5分钟内渗透你的网站!很刑很可拷!

今天我来带大家简单渗透一个小破站,通过这个案例,让你深入了解为什么很多公司都需要紧急修复各个中间件的漏洞以及进行URL解析拦截等重要操作。这些措施的目的是为了保护网站和系统的安全性。如果不及时升级和修复漏洞,你就等着被黑客攻击吧&…

SAP不同语言开发

文章目录 1 Please write English Nmae2 go to goto menu and translation3 Write your target language .4 Please input Chinese5 Summary 1 Please write English Nmae 2 go to goto menu and translation 3 Write your target language . 4 Please input Chinese 5 Summary…

【Docker】Docker基础教程

🦖我是Sam9029,一个前端 🐱‍🐉🐱‍🐉恭喜你,若此文你认为写的不错,不要吝啬你的赞扬,求收藏,求评论,求一个大大的赞!👍 基…

Unity中URP下的SimpleLit顶点着色器

文章目录 前言顶点着色器1、GPU Instance 相关2、顶点输入数据相关3、雾效混合因子4、对 uv 进行 Tilling 和 Offset 的应用 及 把顶点的坐标信息传给输出结构体5、把法线相关的结果,传给输出结构体6、光照贴图相关7、额外灯相关计算8、阴影相关 前言 在上一篇文章…

Vue项目中如何解决跨域详解

文章目录 一、跨域是什么二、如何解决CORSProxy方案一方案二方案三 一、跨域是什么 跨域本质是浏览器基于同源策略的一种安全手段 同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能 所谓同源&#x…

easyMarkets易信是一家靠谱的外汇平台吗 ?FX110汇评

今天小编就带大家全面了解一下老牌优质交易商easyMarkets 易信。在FX110网首页搜索“easyMarkets 易信”进入交易商详情页。 查看FX110官网的交易商详细数据可以发现,easyMarkets 易信在FX110上的交易商评分为83.8分,牌照评级AA级,口碑打分4.…

基于YOLOv7的学生课堂行为检测,引入BRA注意力和多种IoU改进提升检测能力

💡💡💡本文摘要:介绍了学生课堂行为检测,并使用YOLOv7进行训练模型,以及引入BRA注意力和多种IoU改进来提升检测能力 目录 1.SCB介绍 ​编辑 2.如何提高YOLOv7课堂行为检测能力 2.1 训练基于YOLOv7模型的…

【数据库原理】(27)数据库恢复

在数据库系统中,恢复是指在发生某种故障导致数据库数据不再正确时,将数据库恢复到已知正确的某一状态的过程。数据库故障可能由多种原因引起,包括硬件故障、软件错误、操作员失误以及恶意破坏。为了确保数据库的安全性和完整性,数…

类和对象特性

#include<iostream> #include<string> using namespace std; class peron{ public:peron(string person){cout << "peron调用构造函数" << endl;tperson person;}~peron(){cout << "peron调用析构函数" << endl;}//手…

【书生·浦语】大模型实战营——第五次课程作业

基础作业——使用LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署InternLM-Chat-7B模型&#xff0c;生成300字的小故事 环境准备 除了安装所需依赖之后&#xff0c;重要的是进行模型转化&#xff08;转换成TurboMind格式&#xff09;&#xff0c;这里需要注意转化命…

连接器应用案例详解 | prodesign加速卡采用Samtec NovaRay® 极高密度阵列

【摘要/前言】 ChatGPT最近受到的欢迎和关注凸显了人工智能在影响日常生活方面所取得的进展。 有谁曾使用 ChatGPT 完成家庭作业或撰写博客&#xff1f;提前申明&#xff1a;这一篇文章绝对是真人撰写~ 无论如何&#xff0c;像ChatGPT这样的聊天机器人和类似服务的支柱都是高…

如何更改路由器Wi-Fi密码,这里提供通用步骤

这篇文章解释了如何通过路由器的设置更改Wi-Fi密码&#xff0c;即使你不知道当前的密码。 如何更改你的Wi-Fi密码 该过程按照以下一般步骤展开。 ​重要&#xff1a;这些是更改Wi-Fi密码的通用说明。更改路由器设置所需的步骤因不同制造商的路由器而异&#xff0c;甚至可能在…

使用Python编写一个渗透测试探测工具

本篇将会涉及&#xff1a; 资源探测一个有用的字典资源第一个暴力探测器 资源探测 资源探测在渗透测试中还是属于资源的映射和信息的收集阶段。 主要有以下三个类型&#xff1a; 字典攻击暴力破解模糊测试 字典攻击&#xff0c;在破解密码或密钥的时候&#xff0c;通过自定…

Ubuntu 20.04扩容磁盘命令:Ubuntu 20.04扩容系统主分区教程(PV VG LV)

前置知识&#xff1a; 磁盘 最基础的存在&#xff0c;物理磁盘 pv 物理卷&#xff08;同一磁盘 可以划分多个物理卷&#xff09; vg 卷组 &#xff08;一个到多个pv可组成一个卷组&#xff09; lv 逻辑卷 &#xff08;卷组可以划分为多个逻辑卷&#xff09;Ubuntu20.4扩容磁…

ZooKeeper 实战(三) SpringBoot整合Curator-开发使用篇

文章目录 ZooKeeper 实战(三) SpringBoot整合Curator-开发使用篇0. ZooKeeper客户端 1. Curator1.1. 简介1.2. 应用场景1.3. 优势1.4. 依赖说明 2. 依赖导入3. 配置类3.1. 重试策略3.2. 实现代码3.3. 总结 4. Curator中的基本API4.1. 创建节点CreateMode中的节点类型4.2. 查询节…

【RT-DETR改进涨点】MPDIoU、InnerMPDIoU损失函数中的No.1(包含二次创新)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

【51单片机系列】proteus仿真单片机的串口通信

本文参考&#xff1a;https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口软件和单片机通信。通过在proteus设计一个单片机接收PC发送的数据&#xff0c;并将接收的数据发送出去&#xff0c;利用软件【Configure Virtual Serial Port Driver】创建一对虚拟串口&am…