Quarkus:提供多个OpenApi / Swagger-UI端点

时间:2020-01-21 12:27:52

标签: openapi quarkus

我有一个rest api,在版本0中有一些终结点。我想用一个新的更通用的终结点(版本1,相同的路径,但是不同的实现和不兼容的参数)替换当前的终结点,但是需要保留旧的终结点跑一会儿。

问题是:Quarkus是否可以提供两个OpenApi定义和两个Swagger UI页面?

在我的项目中,我包含了openapi依赖项,并让Quarkus生成了OpenApi定义。是否可以将一个定义的版本0的端点归为一组,而将另一个定义的端点归为一组?
我想到了一个设置,可以在其中浏览到example.com/v0/docs/或example.com/v1/docs/。 在不同版本中启动两个API实例很容易,但是我认为不更改端口是不可能的。我希望所有端点都可以在同一端口上访问。
可悲的是,我找不到使用quarkus的示例。

如果这不可能,将v0和v1端点包含在一个定义中是否是一个好习惯?在我看来很奇怪。但是也许就是我。

2 个答案:

答案 0 :(得分:1)

据我所知,答案是否定的。

Quarkus降低了部署和操作的复杂性,但是代价是您无法获得功能齐全的应用程序服务器提供的所有自由(例如,使用不同的URL部署同一应用程序的两个版本)。

但是:由于Quarkus是“容器优先”的容器,因此您应该能够将v0和v1部署在不同的容器中,侦听不同的端口,但是上游Web服务器会将其合并到相同的URL结构中像Apache或NGINX。

在一个Quarkus应用程序中同时使用两个版本似乎会引起很多麻烦,例如关于正确对应用程序进行版本控制。

答案 1 :(得分:0)

如果我需要在完全不同的swagger ui /文件中查找端点的新版本,我会觉得很奇怪。毕竟是同一服务。

恕我直言,典型的方法是:

  1. 要么保持旧服务不变并以旧版本运行,然后分别运行新服务(并在某个时候关闭旧服务)
  2. 将其与某些旧式端点考虑为同一服务,并将所有内容置于同一规范中。如果您想将旧的终结点单独分组,则可以使用swagger标签。 https://swagger.io/docs/specification/grouping-operations-with-tags/