【发布时间】:2020-12-22 00:53:43
【问题描述】:
我需要使用 springdocs 为单个应用程序中的同一个 API 定义两个不同的 OpenApi 定义:一个用于内部开发人员,一个用于外部开发人员。外部定义将包括内部定义中的一些操作,但不是全部。
我已经研究过使用 GroupedOpenApi 创建两个定义,但这需要我将应该从外部定义中排除的端点移动到单独的 RestController 并移动到一个排除的包,该包不会包含在定义中对于外部开发人员,但仍将包含在内部定义中。我更愿意基于 API 定义而不是基于端点的安全访问来构建我的代码。
这似乎可以使用 SecurityScheme 或标签来定义哪些操作包含在给定的定义中,使用诸如 GroupedOpenApi 之类的东西以及要包含的路径/包。因此,例如,我可以为我的外部 API 定义如下内容:
GroupedOpenApi.builder()
.group("externalGroupName")
.securitySchemesToInclude("externalSchemeName") // this doesn't currently exist
.build();
然后,使用该 SecurityScheme 标记为 SecurityRequirement 的任何操作都将添加到此外部定义中。因此,例如,我可以在同一个 RestController 中定义以下两个端点:
将包括:
@SecurityRequirement(name = "externalSchemeName")
@GET
@Path("/pets")
public Response getResponse(){
return null;
}
}
不包括在内:
@SecurityRequirement(name = "internalSchemeName")
@GET
@Path("/pets/internal")
public Response getInternalResponse(){
return null;
}
}
使用这种方法,最好提供类似于路径/包包含/排除的包含/排除安全方案。
这似乎目前需要对 springdocs 做出贡献,除非我误解了如何创建多个定义的选项。是否有另一种方法可以实现仅从我定义的一个定义中排除操作,而不完全从所有定义中隐藏该操作并且不重组我的包?
请注意,如果可能,我也不希望在配置中维护应从组中排除的所有路径的列表,因为这容易出错并且不允许跨多个服务提供共享配置。我更喜欢一种类似于其他 swagger 自定义方式的注释驱动方法,以便我定义一次配置,然后在基于注释定义或修改时更新每个资源,以驱动生成的 swagger。
【问题讨论】:
标签: springdoc