V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
coosir
V2EX  ›  问与答

在代码层面大家是怎么管理 API 接口版本的呢?

  •  
  •   coosir · 2015-05-12 11:10:02 +08:00 · 3246 次点击
    这是一个创建于 3244 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当我们提供API接口的时候,版本可能是0.1, 0.2, 0.3等不断变化。
    比如 GET https://www.v2ex.com/api/v0.1/members/show.json

    考虑到移动端更新不及时,必须保证所有版本都能正常工作。

    1. 曾经看过一个team的代码,直接在代码里面 if else 判断版本号不同版本分别处理。这在版本号很多的时候简直是个灾难。
    2. 每个版本的功能代码放到一个子目录。文件会出现比较多的重复,使用一些框架比如Slim或Lumen的时候要去改写路由部分。

    在代码层面,大家都是怎么做的呢?有没有比较好的实践?
    14 条回复    2016-05-03 15:20:07 +08:00
    abcfyk
        1
    abcfyk  
       2015-05-12 11:35:32 +08:00
    为什么要暴露API的版本给客户端知道? 客户端只需要知道如何调用这个API能取到数据,就够啦。
    zieglar
        2
    zieglar  
       2015-05-12 11:38:06 +08:00
    一个 API 版本一个入口文件
    coosir
        3
    coosir  
    OP
       2015-05-12 11:44:14 +08:00
    @abcfyk 每个版本的客户端是死的,处理返回的数据的方法也是死的。要让不同版本的客户端都正常工作,不区分版本是很难做到的。
    coosir
        4
    coosir  
    OP
       2015-05-12 11:45:19 +08:00
    @zieglar 嗯,然后呢?其他代码怎么按版本处理的?
    jokester
        5
    jokester  
       2015-05-12 11:51:13 +08:00
    unit test
    luin
        6
    luin  
       2015-05-12 12:16:37 +08:00
    Accept: application/vnd.example.v2+json.(https://tools.ietf.org/html/rfc4288#section-3.2)
    sodatea
        7
    sodatea  
       2015-05-12 12:20:45 +08:00
    senver
    sodatea
        8
    sodatea  
       2015-05-12 12:21:05 +08:00
    semver 打错了……
    lincanbin
        9
    lincanbin  
       2015-05-12 12:24:44 +08:00
    如果换API,我会选择让旧App全部挂掉,爱升不升——个人项目。
    luin
        10
    luin  
       2015-05-12 12:29:17 +08:00
    没仔细看不好意思,以为你问的是接口层面 T_T
    lijingyu68
        11
    lijingyu68  
       2015-05-12 12:33:47 +08:00
    我最近也在纠结这个问题
    coosir
        12
    coosir  
    OP
       2015-05-12 13:35:14 +08:00
    @sodatea semver只是版本命名方式吧。我比较困惑的是代码怎么更好地去组织
    flyingfz
        13
    flyingfz  
       2015-05-12 15:48:06 +08:00
    我们之前的处理方式是,每个版本都部署一个虚拟目录,这里是IIS的说法。但ngnix之类的,可以使用urlRewrite方式模拟。
    总之,就是每个版本的api,就是一个独立的站点,独立运作,互不影响。
    konakona
        14
    konakona  
       2016-05-03 15:20:07 +08:00
    @flyingfz 如此一来,需要维护的项目就*N 了..当然是避免不了,但是有没有办法在一个项目里维护呢?

    如果是按照多项目来维系版本共存的话。依赖一个 GIT 倒是个不错的办法,比如说 GIT 有一个 branch 叫“ api ”的目录。里面一堆 v1~vn_release 的 branch 么..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1203 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:50 · PVG 07:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.