如何将所有 C# 微服务放在同一个 Swagger 页面中

How to get all C# microservices together in same Swagger page

提问人:Salva P 提问时间:11/12/2023 最后编辑:Rand RandomSalva P 更新时间:11/13/2023 访问量:52

问:

我正在开发一个平台,在 Ocelot 中完成了 3 个微服务和一个 API 网关。问题是我想在 Swagger 页面中获取所有微服务,例如:enter image description here

我不想实现 Swagger 端点:enter image description here

提前致谢。我在这些问题中停留了几天。

C# net-core asp.net-web-api ocelot

评论

3赞 Rand Random 11/12/2023
不得不问,但你为什么在乎?
0赞 Salva P 11/12/2023
嗨,兰德,对不起,我没有很好地表达问题。我想将所有微服务 swagger.json 合并到一个 swagger.json 中。这样,我就会得到类似第一张图片的东西。换句话说,第一个图像是我想要的,第二个图像是我拥有的,我不想要的。
0赞 Rand Random 11/13/2023
问题不在于我不明白你的问题。我根本不在乎。所以,我问你为什么在乎?为什么要花时间解决这个问题?会有什么好处?
0赞 Salva P 11/13/2023
因为 api-docs 必须只在一个页面中,而这个页面是由 redocly 生成的,而 redocly 只需要一个 swagger.json。

答:

0赞 Jakub 11/13/2023 #1

遗憾的是,.NET 中没有允许您合并 OpenAPI 文档的“内置”功能。在这种情况下,您需要使用一个外部库,该库允许您合并 OpenAPI 文档或自己编写此类功能。使用外部库时,您必须考虑到它们可能无法满足您的要求,例如,过滤端点或处理冲突(例如,具有相同名称的模型出现在您正在合并的多个文档中)。

另一方面,.NET 提供了一个非常简单且用户友好的 API,可以非常方便地处理 OpenAPI 文档 - 您可能需要的所有内容都可以在 NuGet 包中找到。这些软件包几乎涵盖了您可能需要的一切,从阅读各种格式的文档到操作结构。Microsoft.OpenApi

从本质上讲,最基本的合并过程将涉及合并 OpenAPI 文档中的多个列表:

  • 路径
  • 组件(在最简单的情况下,它只是一个 Components.Schemas)

应用你自己的逻辑将允许你以任何你想要的方式管理“输出”文档 - 相对简单。我最近试图解决合并 OpenAPI 文档的问题,但不幸的是,大多数项目要么不符合我的要求,要么几年前就放弃了对它们的支持。

评论

0赞 Salva P 11/15/2023
谢谢波西奥。我有很多工作要做。
0赞 Jakub 11/15/2023
您可以使用现有的开源库。但就我而言,我很快就达到了极限。无论如何,如果您需要最基本的解决方案。也许值得一试。