【问题标题】:REST API versioning - popular API'sREST API 版本控制 - 流行的 API
【发布时间】:2017-03-18 09:48:00
【问题描述】:

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

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

【问题讨论】:

    标签: rest architecture restful-architecture


    【解决方案1】:

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

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

    1. URL:您只需将 API 版本打入 URL,例如:https://haveibeenpwned.com/api/v2/breachedaccount/foo
    2. 自定义请求标头:您使用与以前相同的 URL,但添加了标头,例如 api-version: 2
    3. Accept header:你修改accept header来指定版本,例如Accept: application/vnd.haveibeenpwned.v2+json

    在 cmets 和讨论中,确定了更多技术:

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

    你写道:

    我想知道事实,而不是意见。

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

    所以,虽然有很多争论以一种或另一种方式存在(另请参阅 Best practices for API versioning? 和 Troy 链接到的其他参考资料),但我相信许多“大”服务出于一个简单的实用原因而采用 URI 方法:

    对于新手客户端开发人员来说是最容易理解和实现的。

    这些服务希望尽可能轻松地让大多数客户端开发人员与他们的 API 进行交互,同时尽可能少地提供支持 - 他们中的许多人只是因为想要编写代码而受到启发与此服务的 api 交互。

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

    【讨论】:

    • 我知道解决方案本身是基于意见的。我的意思是那些公司选择 URI 版本控制的事实。你的回答对我来说似乎合乎逻辑,谢谢!
    猜你喜欢
    • 2012-05-31
    • 2018-09-30
    • 2014-08-29
    • 2012-12-25
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多