Мы обновляем наш 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?