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

时间:2012-08-04 06:59:45

标签: api architecture versioning asp.net-web-api

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

  

我们无法发布我们的API,因为我们必须在第一时间做到正确。

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

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

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

3 个答案:

答案 0 :(得分:8)

  

从版本到版本,因为版本已经过时,API可以在没有任何重大更改的情况下发生显着变化,因为旧版本仍然受支持。

这意味着两件事:

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

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

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

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

(免责声明:我在Google工作,但不在G +区域工作。此答案中的观点是我自己的,不代表Google。)

答案 1 :(得分:2)

我认为这有点难以回答。但是,让我试试吧。你做了程序设计,但是你第一次做得对吗?

我的经验是,我从一些方法开始,实际上它还在增长。测试结果为绿色后,我会看一下,发现它不够好。我正在添加其他方法,我正试图“清理”它。

现在,一个更大的软件包的API,根本不是那么“小”。而且我打赌你从一开始就没有接近你觉得“好”的东西。但是,如果您发布了绑定它的API。当你走的时候,你不会让很多朋友打破APIS。因此,如果您对代码有点认真,那么您将支持不同的版本。

我建议看一下GTK的历史。有GTK 1.2.x和超过2的东西。我们曾经根据GTK 1.2编写了软件并且因为2与1.2不兼容而没有“开心”。因此该软件仍然支持GTK的1.2.x ...

因此,通常的方法并不是你还在运行旧的API,而是让它崩溃了。因此,程序员不太乐意尽早发布API(恕我直言)

答案 2 :(得分:0)

您可以要求提供可扩展的API,例如:

APIclass :: anAPIcall(Xclass Xparam,Yclass Yparam,void * userData,void * extensions);

..其中'extensions'在V1.0中作为Null传递。

您可以同意供应商在以后的版本中不支持V1.0提供的功能(但将继续提供)。