Мы создаем версию нашего API и генерируем спецификацию Swagger с использованием Swashbuckle в ASP.NET Core 1.1.Мы можем создать два документа API на основе этих файлов спецификации JSON:
<!-- 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 поддерживает сценарий объединения , но я не смог заставить его работать из-за ошибок проверки схемы (и я более чем уверен, будет ли наш конкретный сценарий фактически поддерживаться).
Моя последняя идея на данный момент получить эту сортировку - каким-то образом JSON-объединить спецификации в одну и затем передать их NSwag.
Мы что-то здесь упускаем?Можно ли это как-то реализовать с помощью NSwag?