REST API 版本控制 - 流行 API

REST API versioning - popular API's

我正在尝试收集有关 REST 版本控制的信息。当我查看论坛时,最喜欢的 似乎 是使用 Accept headers。 但是,如果我查看 StackExchange、Google、Twitter、Yahoo、Instagram 和 eBay 的 API,它们都通过 URI 使用版本控制。

我不明白为什么他们更喜欢这种方式而不是 HTTP headers。我想知道事实,而不是意见。有人可以帮忙吗?

确实没有 'right' 方法可以在 REST 中进行 api 版本控制。我读过的解释不同 'wrong' 方法的最好的文章是 Troy Hunt 的这篇文章:Your API versioning is wrong, which is why I decided to do it 3 different wrong ways

引用这篇文章,他写了三个选项:

  1. URL: You simply whack the API version into the URL, for example: https://haveibeenpwned.com/api/v2/breachedaccount/foo
  2. Custom request header: You use the same URL as before but add a header such as api-version: 2
  3. Accept header: You modify the accept header to specify the version, for example Accept: application/vnd.haveibeenpwned.v2+json

在评论和讨论中,确定了更多技巧:

  1. 主机名:例如https://v2.api.hostname.com/resource
  2. 查询字符串:例如https://api.hostname.com/resource?api-version=2.0
  3. 接受 header 的变体:application/vnd.haveibeenpwned+json; version=2.0

您写道:

I would like to know the facts, not opinions.

不幸的是,这里没有事实这样的东西 - 由于上述所有原因,任何决定都是基于负责人的意见。

因此,虽然有很多争论(另请参阅此 Best practices for API versioning? 和其他参考 Troy 链接),但我相信许多 'big' 服务都集中在 URI 上出于一个简单实用原因的方法:

客户端开发新手最容易理解和实现。

这些服务希望让大多数客户端开发人员能够尽可能轻松地与他们的 api 进行交互,而所需的支持则尽可能少 - 他们中的许多人只是受到启发去编写代码完全出于与此服务交互的愿望' api.

在大多数客户端语言中,操作字符串来构造 uri 是一项相当微不足道的任务,许多开发新手可能从未听说过 accept header。因此,您可以认为它是为满足开发人员的最低公分母而设计的。