我需要在一个应用程序中使用springdocs文档为同一个API定义两个不同的OpenApi定义:一个用于内部开发人员,一个用于外部开发人员。外部定义将包括内部定义中的一些操作,但不是所有操作。
我已经考虑过使用GroupedOpenApi来创建这两个定义,但这要求我将应该从外部定义中排除的端点移到一个单独的RestController中,并移到一个排除的包中,该包将不包括在外部开发人员的定义中,但仍将包含在内部定义中。我倾向于基于API定义来构造代码,而不是基于对端点的安全访问。
这似乎可以使用SecurityScheme或标记来定义在给定的定义中包含哪些操作,可以使用类似于GroupedOpenApi的内容以及要包含的路径/包。因此,例如,我可以使用如下内容定义外部API的定义:
GroupedOpenApi.builder()
.group("externalGroupName")
.securitySchemesToInclude("externalSchemeName") // this doesn't currently exist
.build();
然后使用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。
发布于 2020-09-02 14:58:27
使用您的示例,您有其他未使用的GroupedOpenApi过滤器(基于路径):
GroupedOpenApi.builder()
.group("internalGroupName")
.pathsToMatch("/pets/internal")
.build();
GroupedOpenApi.builder()
.group("externalGroupName")
.pathsToMatch("/pets")
.packagesToExclude("/pets/internal")
.build();
https://stackoverflow.com/questions/63712552
复制相似问题