为什么开发人员在实现版本控制时如此珍贵地发布API?

and*_*ndy 6 architecture versioning api asp.net-web-api

当我听到关于发布版本1 API的讨论时,它始终伴随着这个基本的想法:

我们还不能发布我们的API,因为我们必须在第一时间做到正确.

这是Vic Gundotra最近的一个例子,但是在API发布前一天,还有很多其他的包括Stackoverflow本身.

我不明白的是,为什么第一个版本必须如此"正确"?使用API​​,您可以实现版本控制和良好的文档,如果您做得好,哪个并不难,为什么对版本1 API如此珍贵?

从版本到版本,因为它是版本化的,所以API可以在没有任何重大更改的情况下发生显着变化,因为仍然支持旧版本.我想知道为什么发布API的重大问题?

Jon*_*eet 8

从版本到版本,因为它是版本化的,所以API可以在没有任何重大更改的情况下发生显着变化,因为仍然支持旧版本.

这意味着两件事:

  • 维护API的多个版本.即使你只支持"最后3个版本"仍然是一个负担.特别是,如果您在以后公开要删除的功能,则意味着您无法执行任何清理工作,这些清除工作将作为删除的一部分提供,直到N个版本来来去去.考虑由于API中的重大变化而可能产生的存储数据的任何分支 - 当多个系统使用它们时,迁移存储表示,在不同的发布计划上更新,这是一个真正的痛苦.(是的,实现和API之间存在差异 - 但API中的更改通常最终意味着在堆栈中一直发生变化.)
  • 最终激怒了很多开发者.即使你给出足够的警告,如果他们不得不做重大的重写,人们感到恼火,因为版本1.0是垃圾,当1.4出来时,1.0将被删除.

正确设计API是一件棘手的事情.是的,在实用主义和完美主义之间取得了平衡 - 但它并不像你想要的那样简单.

我还要指出,(例如)一个开源项目与10个用户快速推出然后更改它,以及像谷歌或微软这样的公司为全球开发者社区这样做之间存在相当大的维护差异.大公司的内部API(您无法轻松修复整个代码库)与小公司的内部API之间存在巨大差异,您可以随时随地改变世界.

对于对此做出如此重大的事情感到惊讶,我有一些同情 - 但这表明你没有经历过改变API可能意味着什么的痛苦.你可能同样感到惊讶 - 或者甚至更多 - 只要在一个错误的决定逃逸到世界之后做出根本改变是多么困难.

(免责声明:我在谷歌工作,但不在G +区域工作.这个答案的意见是我自己的,不代表谷歌.)

  • @andy:新版本的.NET框架通常会添加*新功能,但很少会破坏现有的API.我怀疑开发人员会很高兴得知他们现有的应用程序不会在新版本的框架上运行. (2认同)