使用Swagger 2.0进行REST API版本控制

我需要我的节点REST API版本。 我正在使用swagger 2.0来validation中间件和文档。 目前我只有一个单一的swagger yml文件,用于所有目的。

我正在使用URL前缀(版本号:/ v1 / … / v2 / …等)来支持Node Rest API中的版本控制。 而且我需要在任何时候支持多个版本。

  1. 我应该为每个API版本创build一个单独的swagger yml文件吗? 如果是的话,如何在swagger-validation中间件中加载/pipe理多个swagger yml文件
  2. Swagger 2.0格式规范是否允许在同一文件中定义版本化path。

Swagger没有指定版本控制scheme,仅仅因为没有单一的解决scheme,强制一种方法来使用规范是没有意义的。 以下是我见过的常用技巧:

1)将您的身份validation绑定到一个版本。 我认为这是处理版本控制的最酷的方法,但也是支持和维护成本最高的方式。 例如,基于用于访问服务的api密钥,您可以跟踪他们期望访问的版本,并将其路由到正确的服务器。 在这种情况下,您可以简单地运行多个服务,使用不同的swagger定义。

2)使用path部分来指示版本。 这意味着您的path中有一个/v2/v3 ,并且基于此,一些路由逻辑会将您指向正确的服务器。 再一次,一个单独的swagger定义。

3)基于某个标题,让用户select要交谈的服务器。 这很不直观,但它可以工作。 你应该总是有一个默认的版本(通常是最新的)

也就是说,以上所有的解决scheme都意味着多个swagger文件。 您可以使用$ ref语法来链接和重用规范的一部分。

我相信与swagger工具,你可以有多个实例侦听请求。 你只需要在它们前面有一个路由层来处理你select的不同版本。