`
bugtags
  • 浏览: 29973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

PHP 开发的 API 多版本管理实践

PHP 
阅读更多

遇到的情况

本文针对移动互联网客户端需要兼容旧版的情况,强制升级到最新版本的 app 不在讨论之列。

在 bugtags.com 项目中,我们的版本遵循下面规范。
1.0.1
大功能.小更新.bug 修正
我们的版本列表如下:

1.0、1.1、1.2、1.3、1.4
2.0、2.1、2.2、2.3
3.0、3.1

5.0

这样一个版本结构,所有版本都可以用,跨度最大时,1.0 用户要跟 5.0 用户并存。
以 /api/user/info 接口举例,经过这么多版本的迭代,版本 1.0 跟 3.0 的返回数据结构可能已经完全不同了。
对于这样一个系统,如何设计一个完备的版本架构非常重要。

理解其中的困难

移动互联网,有别于传统的 web 开发。其快速迭代、版本升级与传统的 web 开发相比,有如下困难:

  1. 用户获取困难,留存率低
  2. 客户端升级成本高,部分用户拒绝升级
  3. 多个版本服务器端代码量大,急剧拉高维护成本

架构的目的及要求

  1. 简化版本管理流程,易配置管理
  2. 缩小服务器端的 php 代码规模
  3. 尽量不要引入新的要素

微信群里的讨论

请求形式的约定

  1. 使用域名,如 v1.api.bugtags.com 来区分接口的版本
  2. 将版本信息放到 url 的 pathinfo 中,如 api.bugtags.com/v1/
  3. 将版本信息放到请求参数中,如 api.bugtags.com/user/1?_ver=1.0.1
  4. 将版本信息放到 http header 中,如 API_VER: 1.0.1

版本号用域名是比较不被认同的方案,主要原因是域名管理往往跨部门,增加了沟通成本。
http 头是我个人最赞同的一种方式,可以保持 url 的整洁。
url 参数中携带版本号的方式也很好,但是要注意不要跟业务逻辑的参数名重复。

两种常见的管理代码的方式

git/svn 的 tag 管理方式

优点,随时切换分支成本低,尤其在 git 管理代码时。
缺点,如果多个版本需要修改时,代码合并工作量大。

只有一个分支,在代码中根据版本信息做判断

优点,代码的总体规模小(只有一份代码)
缺点,在需要判断版本的地方会有大量的分支语句

我总结的解决办法

最后的解决办法充分利用了 php 的 autoload 加载机制和命名空间。

  1. 假设 base 是所有业务的基础,是第一个版本,也是生命周期最长的版本。
  2. v10 对版本 1.x.x 提供服务,最大限度消除业务点上的版本逻辑判断,但是不绝对拒绝。
  3. v20/v30 基于 v10 版本开发
  4. v40 版本基于 v30 版本开发

版本管理架构示意图版本管理架构示意图

举例说明

v10 提供 a,b,c 三个接口
v20 提供 a1,b,c 三个接口, a1 是 a 的修改
v30 提供 a,b1,c 三个接口, b1 是 b 的修改

用下面三段代码来具体描述



 

 

 
配置版本:
访问版本 代码版本
v10 base
v11 base
v20 v10
v30 v10
  • 基础目录 base 存放大部分公共代码
  • 版本目录 v10/v20 都是版本目录,里面存放此版本与 基础版本不同的逻辑
  • 版本区别以文件为最小粒度,以上面三段代码可以看出。

用户要访问 /api/user/info?ver=3.0.1 此时,类的加载顺序依次为:

  1. 在 v30 下尝试加载 Config.php 失败
  2. 在 v10 下尝试加载 Config.php 失败
  3. 在 Base 下尝试加载 Config.php 成功
  4. 执行相关逻辑

这是限制只能继承一层的原因是尽可能的降低系统的复杂度。这种方式管理代码已经在几个项目中得到一些验证。系统代码的复杂度可以很大程度上降低,尤其是多个版本迭代、又不能强制升级的系统中。另外需要注意的就是 :

  1. 使用这个方式处理加载时,在经过几个版本的沉淀后,应该将通用部分渐渐沉淀到BASE版本中
  2. 发布系统最好带有删除文件功能,否则被部分沉淀后,高版本会依旧使用高版本的代码。

笔者在开发和运营 bugtags.com ,这是一款能够极大的提升 app 开发者测试效率的 SDK 产品,欢迎使用、转发推荐。

我们团队长期求 PHP 后端,有兴趣请加下面公众号勾搭:

bugtags

 

 

分享到:
评论

相关推荐

    基于PHP的ApiAdmin后台管理系统源码.zip

    总之,ApiAdmin后台管理系统是一个包含了许多PHP开发核心概念和实践的项目,对于希望深入理解和应用PHP进行Web开发的人员来说,这是一个宝贵的资源。通过研究和分析其源代码,开发者不仅可以学习到实际的PHP编程技巧...

    PHP官方API文档

    总的来说,PHP官方API文档是PHP开发者不可或缺的工具,它不仅提供了全面的函数和类的说明,还有丰富的示例和最佳实践,对于提高开发质量与效率至关重要。无论是初学者还是高级开发者,都应该充分利用这份资源,不断...

    PHP开源api管理平台源码v1.2 带后台.rar

    【PHP开源API管理平台源码v1.2详解】 ...本开源API管理平台源码v1.2是基于PHP构建的,旨在帮助开发者更有效地管理和...通过深入研究源码,开发者不仅可以定制自己的API管理平台,还能学习到PHP开发的最佳实践和相关技术。

    基于tp5的restfulapi风格接口oauth20接口版本管理

    综上所述,这个项目涉及了使用ThinkPHP5框架实现RESTful API接口,结合OAuth2.0进行安全授权,以及接口版本管理的最佳实践,对于想要学习和实践PHP Web服务开发的人员来说,是一个有价值的参考案例。通过深入理解...

    高性能的 PHP API 接口开发 第4章 API接口的提炼.rar

    在本章“高性能的 PHP API 接口开发”中,我们将深入探讨如何构建高效、稳定且易于维护的 API 接口。PHP 作为一款广泛应用于Web开发的语言,其在API接口设计方面同样有着广泛的应用。本章内容将涵盖以下几个关键知识...

    Thinkphp3.2开发的API后台管理系统.zip

    本文将深入探讨如何利用Thinkphp3.2进行API后台管理系统的开发。 一、Thinkphp3.2框架基础 Thinkphp3.2是Thinkphp框架的一个版本,它基于MVC(Model-View-Controller)设计模式,使得代码结构清晰,易于维护。该...

    高性能的 PHP API 接口开发 第2章 API接口的基本实现.rar

    在本教程中,我们将深入探讨如何使用PHP进行高性能的API接口开发。API(Application Programming Interface)接口是软件之间通信的桥梁,特别是在Web服务中,它允许不同应用之间共享数据和功能。PHP作为一款广泛使用...

    YUPOO PHP API开发包

    **标题解析:** "YUPOO PHP API开发包" 是一个专为PHP开发者设计的工具...通过以上知识的学习和实践,开发者可以有效地利用"YUPOO PHP API开发包"将YUPOO相册功能融入到他们的应用中,为用户提供更丰富的功能和服务。

    基于ThinkPHPV5开发的面向API的后台管理系统

    而ThinkPHP V5作为国内广泛使用的PHP开发框架,以其强大的功能和易用性,成为了构建API后台管理系统的首选工具。本文将深入探讨基于ThinkPHP V5开发面向API的后台管理系统的相关知识点。 一、ThinkPHP V5框架简介 ...

    PHP实例开发源码—ApiAdmin后台管理系统.zip

    【标题】"PHP实例开发源码—ApiAdmin后台管理系统.zip" 涉及的主要知识点是PHP编程语言在构建API管理和后台系统方面的...对这个项目的研究和学习,对于提升PHP开发技能和理解后台管理系统的设计与实现具有极大的价值。

    thinkphp3.2-API 接口开发分享

    - **版本控制**:为了确保接口的稳定性和向后兼容性,需要对API进行版本管理,例如通过URL路径或请求头来指定API版本。 - **错误处理**:返回标准的HTTP状态码和易于理解的错误信息,帮助调用者快速定位问题。 2....

    ThinkPHP内核API接口管理平台源码 v1.2.zip

    4. **版本控制**:对于有多个版本的API,平台支持版本管理,开发者可以轻松切换不同版本的API,避免因版本升级带来的影响。 5. **权限控制**:为了保护API的安全,源码还包含了权限控制机制。管理员可以设置不同的...

    Laravel开发API助手

    **Laravel 开发 API 助手** 在 PHP 开发领域,Laravel 框架以其优雅的语法和强大的功能深受开发者喜爱。对于构建 API(应用程序编程...对于初学者来说,理解和实践这些概念是提升 Laravel API 开发技能的关键步骤。

    php对接海康威视接口开发

    总之,PHP对接海康威视接口开发是一项涉及网络通信、身份验证、数据解析等多个技术领域的任务。通过使用官方提供的PHP类文件,开发者可以简化对接过程,更高效地实现与海康威视综合安防平台的互动。在实际应用中,...

    简单PHP做API接口写注册登录

    综上所述,这个资源提供了使用PHP实现注册和登录API接口的实践教程,对于想要学习API开发,特别是PHP新手来说,是一个不错的起点。通过实际操作,可以了解API接口的设计原则、数据库交互以及前后端通信等关键知识点...

    php_manual.zip/php文档/php_api

    通过深入阅读和实践PHP Manual中的内容,开发者可以掌握PHP API的使用技巧,提升编程能力,解决实际开发中的问题。这份资源不仅是初学者入门的良师,也是资深开发者解决问题的益友。希望这份分享能对大家的学习和...

    php对接抖音api demo

    本文将详述如何使用PHP对接抖音API,并提供一个简单的PHP对接抖音API的DEMO示例,以帮助开发者理解并实践这个过程。 首先,我们要了解抖音API的基本概念。抖音API(Douyin API)是抖音官方提供的接口,允许开发者...

    sina微博API接口(php)

    在本案例中,我们关注的是新浪(sina)微博的API接口,尤其是一个基于PHP实现的版本。这个压缩包文件提供了一个示例,名为"weibodemo",用于帮助开发者快速理解和使用sina微博的API,从而实现站外与微博平台的数据...

    PHP Framework CareyShop——基于API而开发的高性能PHP商城框架系统(基于PHP5.6+).zip

    学生们可以在此基础上学习和实践PHP编程、数据库设计、API开发以及前端技术,提升综合能力。 总结来说,CareyShop是一个基于PHP5.6和MySQL的高性能商城框架,特别适合API驱动的开发。它采用了MVC架构,支持RESTful ...

    PHP项目开发全程实录- 博客管理系统(php源码)精心收集

    【PHP项目开发全程实录-博客管理系统】是一个深入学习PHP编程和构建实际Web应用的实践教程,涵盖了从设计、开发到测试和优化的全过程。在这个系统中,PHP被用来处理服务器端逻辑,创建动态网页,与数据库交互,实现...

Global site tag (gtag.js) - Google Analytics