![](/img/trans.png)
[英]Creating a "latest" version of swagger documentation via Swashbuckle
[英]Is there way to create a swagger doc for latest version api?
我使用名为“swagger”的 dotnet 工具创建 swagger json 文件,其中包含特定版本的 API 规范。 命令类似于: swagger tofile --serializeasv2 --output rest-api.json C:\Service.dll v1
如您所见,我必须通过 swagger 文档名称v1
才能导出文件。 名称为 API 版本。 有没有办法导出最新版本?
我试图创建一个名为“latest”的 swagger 文档,其中包含最新版本的 API,但我做不到。 有谁知道如何创建显示最新版本 API 的 swagger 文档?
v1
是Swashbuckle 项目中的代码示例给出的默认名称:
services.AddMvc();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
});
除此之外,它作为版本号没有特别的意义——它只是代码作者选择的名称。 “最新版本”是代码当前指定的任何内容。 使用不同的名称多次调用c.SwaggerDoc
会暴露不同的 Swagger 文档,您可以选择让它们的名称表示版本 - 这取决于项目的 Swashbuckle 配置。
感谢每一个人的帮助。 我找到了解决方案。
主要目标是避免在出现新版本 API 时更改控制台命令。 我说的是最后一部分v1
。 如果出现 v2 doc,我必须将它传递给命令。
现在我可以将latest
值传递给命令并获取包含最新版本 API 的 rest-api.json。
swagger tofile --serializeasv2 --output rest-api.json C:\Service.dll latest
我做了什么:
在我的项目中,我为实现ISwaggerProvider
的服务实现了一个装饰器
public class SwaggerGeneratorDecorator: ISwaggerProvider
{
private readonly ISwaggerProvider _decorated;
private readonly IApiDescriptionGroupCollectionProvider _provider;
public SwaggerGeneratorDecorator(ISwaggerProvider decorated, IApiDescriptionGroupCollectionProvider provider)
{
_decorated = decorated;
_provider = provider;
}
public OpenApiDocument GetSwagger(string documentName, string host = null, string basePath = null)
{
if (documentName == "latest")
{
var group = _provider.ApiDescriptionGroups.Items.MaxBy(group => group.GroupName);
documentName = group?.GroupName ?? documentName;
}
return _decorated.GetSwagger(documentName, host, basePath);
}
}
然后在服务集合中注册它。
services.Decorate<ISwaggerProvider, SwaggerGeneratorDecorator>();
现在,当我使用 'latest' 参数运行命令时,我会使用最新的 API 版本生成文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.