是否有办法为最新版本的api创建一个swagger文档?



我使用了一个叫" swagger"创建一个包含特定版本API规范的swagger json文件。命令如下:swagger tofile --serializeasv2 --output rest-api.json C:Service.dll v1

正如您所看到的,我必须传递swagger文档名称v1来导出文件。名称是API的版本。是否有办法导出最新版本?

我尝试创建一个名为"最新"的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值传递给命令并获得rest-api。

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);
}
}

然后在service collection中注册。

services.Decorate<ISwaggerProvider, SwaggerGeneratorDecorator>();

现在,当我运行带有'latest'参数的命令时,我得到了最新API版本的生成文件。

最新更新