我们有一项服务提供 2 个独立的 Rest API。一种是我们的客户使用的简单 API,另一种是 Web 应用程序使用的内部 API。
\n我们的客户无法访问 Web API,因此我希望能够提供 2 种独立的 OpenApi 规范,一种适用于我们的客户,另一种适用于我们的 Web 开发人员。
\n我找到了一种非常简单的方法来实现我想要的目标,即创建端点、检索 OpenApi 文档并过滤掉属于客户 API 的标签。
\n@Inject\nOpenApiDocument document;\n\n@Operation(hidden = true)\n@GET\n@Produces("application/yaml")\npublic Response customer() throws IOException {\n OpenAPI model = FilterUtil.applyFilter(new MyTagFilter("mytag"), document.get());\n\n String result = OpenApiSerializer.serialize(model, Format.YAML);\n\n return Response.ok(result).build();\n}\n\nRun Code Online (Sandbox Code Playgroud)\n一个问题是,在开发模式下注入的 OpenApiDocument 实例为 null。OpenApiDocumentProducer 似乎缺少 OpenApiHandler 类中存在的一些类加载器魔法。另一个小问题是过滤器 \xe2\x80\x9cMyTagFilter\xe2\x80\x9d 还需要过滤掉任何标记的 PathItem 未使用的模式,并且代码变得有些狡猾。
\n不幸的是,据我所知,不可能有两个单独的 OpenAPI 规范。但是,您可以考虑以下几种解决方法:
第一个选项是将 API 分成两个单独的 Quarkus 应用程序。这样,每个 API 都会有自己的 OpenAPI 规范。
另一种选择是将所有端点包含在单个 OpenAPI 规范中,甚至包括您不想公开公开的内部端点。然后,生成规范后,您可以使用 YAML 库对 openapi.yaml 文件进行后处理并删除内部端点。这将为您提供一个干净的规范,您可以将其导入到 Swagger UI 中。请记住,您必须通过身份验证来保护内部端点。
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |