【发布时间】:2018-11-09 06:33:41
【问题描述】:
我们正在对我们的 API 进行版本控制,并在 ASP.NET Core 1.1 中使用 Swashbuckle 生成 Swagger 规范。我们可以根据这些 JSON 规范文件生成两个 API 文档:
<!-- language: c# -->
services.AddSwaggerGen(setupAction =>
{
setupAction.SwaggerDoc("0.1", new Info { Title = "Api", Version = "0.1", Description = "API v0.1" });
setupAction.SwaggerDoc("0.2", new Info { Title = "Api", Version = "0.2", Description = "API v0.2" });
// more configuration omitted
}
我们将所有操作都包含在两个规范文件中,除非它使用[MapToApiVersion] 和ApiExplorerSettings(GroupName ="<version>")] 属性映射到特定版本。仅属于旧版本的方法也用[Obsolete] 属性修饰:
<!-- language: c# -->
[MapToApiVersion("0.1")]
[ApiExplorerSettings(GroupName = "0.1")]
[Obsolete]
但是,我们只希望从两个规范文件的联合中生成一个 C# 客户端,其中所有方法都包含在客户端中,0.1 和 0.2,但实际上所有过时的方法都标记为过时。
我已经研究了 NSwag(我们已经使用了很长一段时间了)以及 AutoRest。 AutoRest 似乎是support a merging scenario,但由于架构验证错误,我无法让它工作(而且我不确定我们的特定场景是否会得到实际支持)。
到目前为止,我对这个排序的最后一个想法是以某种方式将规范合并为一个,然后将其提供给 NSwag。
我们在这里有什么遗漏吗? NSwag 能以某种方式实现吗?
【问题讨论】:
-
所以如果我理解正确,您目前正在使用 Swashbuckle 并希望迁移到 NSwag/AutoRest?
-
没有。我们正在使用 Swashbuckle.AspNetCore 生成规范 (JSON),并使用 NSwag 生成 C# 客户端。如果可能,我们不想迁移任何东西。
-
我认为你可以在 Swashbuckle 上做到这一点,看看这个:swagger-net-test-multiapiversions.azurewebsites.net/swagger/ui/…
-
@HelderSepu 看起来很像我需要的东西。我猜,默认情况下,我会生成客户端。您是否有指向特定文档或示例代码的链接?谢谢!
标签: c# swagger swashbuckle autorest nswag