restapi更新设计

restapi更新设计,api,rest,Api,Rest,我看过许多关于REST及其API设计实现的文章。然而,我有几个问题,也许他们只是固执己见,因为REST或API开发通常没有“一刀切的解决方案” 请注意,这些问题与联系和接收SDK请求有关 我的问题都是关于URI表单的,我相信它被称为。我已经从几个方面看到了这一点,但我最关心的是版本控制和“动态”部分 对于我的第一个问题(版本),我经常使用以下方法 /customers/accounts/V3.4/customer_id/1234 /customers/accounts/V3.5/customer

我看过许多关于REST及其API设计实现的文章。然而,我有几个问题,也许他们只是固执己见,因为REST或API开发通常没有“一刀切的解决方案”

请注意,这些问题与联系和接收SDK请求有关

我的问题都是关于URI表单的,我相信它被称为。我已经从几个方面看到了这一点,但我最关心的是版本控制和“动态”部分

对于我的第一个问题(版本),我经常使用以下方法

/customers/accounts/V3.4/customer_id/1234
/customers/accounts/V3.5/customer_id/1234
开发人员将通过保留一个通用版本类来实现这一点,当他们调用时,它将获取开发人员设置的任何版本。因此,如果他们想要升级到一个新的API版本,他们只需要在一个位置修改V。我想知道这个想法在实践中有多好,特别是对于SDK。我的总体想法是这没问题。我相信这一点,因为版本已经明确指出。如果需要进行更改,只需更新版本调用即可。考虑到SDK,使用旧API不会破坏任何东西,就好像他们暂时不更新一样,那么他们的API请求仍然可以,但会通过旧端点路由

问题1。使用上述方法的版本是否适合API更新?赞成/反对

关于动态值的第二个问题如下所示

/customers/V4.3/{customer_id}/account
versus
/customers/accounts/V3.4/customer_id/1234
我不确定是否有一个更好的折衷办法,让动态端点与上面列出的硬编码端点相比。我这样说是因为如果我们有一个场景,希望在“帐户”页面中添加详细信息,该怎么办

在上面的示例中,customers/V4.3不必更新,因为它仍然包含相同的用户列表中点。我们将能够在不引起版本更改的情况下更新帐户API。(如果这是个糟糕的主意,请原谅我)。但是对于第二个选项,我们必须更新版本控制,因为这是一个中点

问题2。在上面的例子中,关注更多的静态端点还是动态端点更好


对这方面的了解还是很新的,如果我对API设计做出了一些错误的假设或结论,请原谅。

使用参数有什么问题

伊姆霍

动态的或将来可能更改的内容不应成为URL路径的一部分

这就是参数存在的原因。好处是:-

http://example.com/api/resource/?customer_id=1234&v=3.4
您的脚本会将其视为:-

http://example.com/api/resource/?v=3.4&customer_id=1234
我不知道SDK的上下文,但在允许API用户选择版本和执行操作之前,我会仔细考虑需求

另外请看一下

这是一个可以绕圈子的。指定版本有三个选项:URL、内容类型或自定义标题。所有这些都会被一些人认为是“错误的”

特洛伊·亨特(Troy Hunt)在这里围绕利弊写了一篇相当不错的讨论:

然而,我不一定会很快就将版本控制作为解决方案。你可能想通过使用更宽容的消费者,投资更多的前期设计或者应用到你的API来考虑这一问题。

这里更详细地阐述了这一论点:

其中包括一段精彩的引语:

有些人在遇到问题时会想“我知道,我会使用版本控制。”现在他们遇到了2.1.0版的问题


我只想补充一下,我认为最好是在URL的开始,而不是在中间的版本号,这取决于,我想,如果你想为每个模块保持单独的版本号,他们可能是可以的。我——我只是对整个API进行了版本化,即使更改只影响到某些部分。尽管这是一个有趣的问题,也是一场更有趣的辩论,但正如@Ben Morris所指出的,答案非常含糊不清,并且在很大程度上取决于个人喜好。因此,我已将这个问题标记为结束,因为不可能有一个规范的答案。