NetCore 使用 Swashbuckle 搭建 SwaggerHub

什么是SwaggerHub?

Hub 谓之 中心, 所以 SwaggerHub即swagger中心.

什么时候需要它?

通常, 公司都拥有多个服务, 例如商品服务, 订单服务, 用户服务, 等等, 每个服务都有自己的environment, endpoint, swagger schema. 然而这些信息都分散在各处, 如果能集中在一个地方展示出来, 就能减少许多无意义的沟通协作, 另外也可以有更有全局视野查看整个公司的API's.

成熟的商业产品.

例如 https://swagger.io/tools/swaggerhub/, 不光可以做Hub, 还有很多其他的管理功能, 实时的编辑器, 版本管理等等.
商业产品功能很好, 但是要钱.
所以... 我们可以...

使用 Swashbuckle.Swagger 搭建SwaggerHub.

在NetCore的世界里, 我们可以使用 Swashbuckle.AspNetCore来构建一个我们自己的SwaggerHub. 而且特别简单, 我们仅需要一行代码即可

var swaggerUIOptions = new SwaggerUIOptions();
swaggerUIOptions.ConfigObject.Urls = new[] {
    new UrlDescriptor() {
        Name = "swagger name",
        Url= "swagger.json"
    }
};

app.UseSwaggerUI(swaggerUIOptions);

我们只需要配置Urlsoption, 增加多个swagger json 配置就完事儿了, 如此, Hub就完成了. 本文章到这里也就算完事儿了.
剩下的就是根据公司情况如同, 采用的方案不同而要解决的一些实际问题了.

对swaggerUIOptions的改动是实时生效的.

swaggerUIOptions对象的任何更改都是实时生效的, 所以我们可以做到只要改配置即可实时生效.

Url 可以配置为一个endpoint, 直接由swaggerui在浏览器中下载指定的文件.

new UrlDescriptor(){Url="https://www.cnblogs.com/swagger.json"}

Url 也可以是在任何地方的一个文件

//配置url从当前项目的一个地址下载文件.
new UrlDescriptor(){Url="/swagger-file/swagger.json"}

// 从本地读取swagger文件
[HttpGet("/swagger-file/{swaggerName}.json")]
public IActionResult GetSwaggerFileAsync([FromRoute] string swaggerName)
{
    return this.File($"static-file-dir/swaggers/{serviceName}.json", "application/json");
}

当然, 我们也可以读取任何地方的swagger文件, 例如在github, 各种云存储(aws/s3, aliyun/oss)等等.

为每一个swagger配置server地址.

每个swagger可能代表这不同的服务, 大概率就有不同的endpoint, 也可以是多个环境配置地址(dev,uat,staging,pro).
给swagger.json增加servers节点即可.

{
    "servers":["server-endpoint1","server-endpoint2"]
}

可以使用各个JSON组件动态插入, 也可以用Microsoft.OpenApi.Readers 组件来解析和改写所有swagger的内容

var doc = new OpenApiStreamReader().Read(sourceSwaggerJson, out _);
doc.Servers.Add(new OpenApiServer() { Url = "my-dev-server-endpoint" });
doc.Servers.Add(new OpenApiServer() { Url = "my-pro-server-endpoint" });
string swaggerJsonContent = targetDoc.SerializeAsJson(Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0);

Microsoft.OpenApi.Readers 可以用来解析openAPI 格式的文档. 支持v2,v3等版本, 支持json,yaml格式. 详情可查看官方文档. 所以这个netcore 的 swaggerhub 自然而然的就支持读取任何语言支持的openAPI文档(java, nodejs, 等等).

合并多个swagger文档到一个swagger文档

单一的一个服务由多个不同的服务提供服务支持. 举个例子, 商品服务由商品服务+商品搜索服务共同组成, 2个单独的服务由2个单独的team负责维护, 但是对外提供服务的时候暴露在同一个domian下, 根据path route到不同的服务上. 这个时候我们还是使用Microsoft.OpenApi.Readers 来做合并这个事情.

//demo代码
var productDoc= download();
var productSearchDoc= download();
var targetDoc = new OpenApiDocument() { Components = new(), Paths = new() };

targetDoc.Paths.Add(productDoc.Paths)
targetDoc.Paths.Add(productSearchDoc.Paths)
targetDoc.Components.Schemas.Add(...)
//巴拉巴拉
string swaggerJsonContent = targetDoc.SerializeAsJson(Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0);

上面只是列出了我碰到的几个具体情况, 不同的公司不同的场景下还有更多可能的case. 这个就得case by case了. 但是一个万变不离其宗, 总之就是对openAPI生成是swagger文件进行自定义. 这个时候用Microsoft.OpenApi.Readers就完事了.

综上,
SwaggerHub, SwaggerUI 用Swashbuckle.AspNetCore搭建.
OpenAPI Swagger Doc 用Microsoft.OpenApi.Readers做定制化修改.

原文链接:https://www.cnblogs.com/calvinK/p/netcore-buiding-swaggerhub.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NetCore 使用 Swashbuckle 搭建 SwaggerHub - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • VS2022使用ClickOnce发布程序本地安装.net框架

    因为遇到下面的错误,没有在网上搜到详细解决问题的教程,费了一些时间才解决了问题,特此记录一下,也希望能帮助到其他人。  要在“系统必备”对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“.NET 桌面运行时 6.0.14 (x64)”项的文件“net6desktopruntime_x64\windowsdesktop-runtime-6.0…

    C# 2023年5月7日
    00
  • C#调用sql2000存储过程方法小结

    下面就是详细讲解“C#调用sql2000存储过程方法小结”的完整攻略。 前提条件 在开始使用C#调用SQL Server 2000存储过程之前,需要满足以下前提条件: 电脑上已安装SQL Server 2000或更高版本,并正确配置SQL Server的连接信息。 电脑上已安装Visual Studio开发工具,并正确配置了数据库连接信息。 步骤 接下来,我…

    C# 2023年6月2日
    00
  • C# 生转换网页为pdf

    下面我将详细讲解C#如何实现将网页转换为PDF的完整攻略,包括步骤和代码示例。 步骤1:下载使用合适的PDF组件 要生成PDF文件,我们需要使用PDF生成组件。C#中常用的PDF组件包括iTextSharp、PDFSharp以及Winnovative等。这里,我们以iTextSharp为例,进行讲解。 步骤2:创建一个PDF文档对象 在使用iTextShar…

    C# 2023年6月6日
    00
  • .NET使用YARP通过编码方式配置域名转发实现反向代理

    以下是“.NET使用YARP通过编码方式配置域名转发实现反向代理”的完整攻略: 什么是YARP YARP(Yet Another Reverse Proxy)是一个开源的反向代理组件,由微软开发。它是一个轻量级、高性能、可扩展的反向代理组件,可以用于构建高性能的微服务网关、API网关等。 YARP的特性 YARP具有以下特性: 支持HTTP、HTTPS、We…

    C# 2023年5月12日
    00
  • .Net Core静态文件资源的使用

    .NET Core静态文件资源的使用攻略 在 .NET Core 中,静态文件资源是一个非常常见的功能,它可以帮助我们在 Web 应用程序中提供静态文件的访问。本攻略将详细介绍如何在 .NET Core 中创建静态文件服务器,并提供两个示例说明。 静态文件服务器的作用 .NET Core 的静态文件服务器可以帮助我们: 提供静态文件的访问。 管理静态文件的版…

    C# 2023年5月16日
    00
  • 深入理解C#中的Delegate

    深入理解C#中的Delegate Delegate是C#中的一种数据类型,用于实现委托机制。Delegate可以将方法作为参数传递、作为返回值返回,并支持多播委托。 委托的定义 委托(Delegate)实际上就是一个函数指针,可以指向一个或多个具有相同参数和返回值类型的方法,可以把委托看作是一个代理,用来调用方法。在C#中,委托是一个完整的类类型,包含许多方…

    C# 2023年5月15日
    00
  • C#生成Word文档代码示例

    下面是关于“C#生成Word文档代码示例”的完整攻略: 第一步:安装和引用必备组件 要使用C#生成Word文档,需要安装Open XML SDK 2.5 for Microsoft Office。这个组件提供了一个C# API,可以在应用程序中使用C#代码创建、读取和编辑Microsoft Office Word文档。 安装完成后,可以在Visual Stu…

    C# 2023年5月31日
    00
  • C# 基于NPOI操作Excel

    C#基于NPOI操作Excel 在C#中,我们可以使用NPOI操作Excel文件。NPOI是一个开源的.NET库,它提供了对Microsoft Office的读取和写入支持。在本文中,我们将介绍使用NPOI操作Excel的完整攻略。 安装NPOI 要使用NPOI,我们需要先安装它。我们可以通过NuGet安装NPOI。在Visual Studio中,依次打开”…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部