2016-06-20 2 views
2

Я рассматриваю использование Swashbuckle/Swagger для документирования моего решения WebAPI. Портал разработчика был бы чем-то вроде https://myapi.com/, а версированный API - https://myapi.com/v1/users.Swashbuckle, несколько версий API и виртуальные каталоги

Часть версии URL-адреса относится к виртуальному каталогу, содержащему двоичные файлы и файлы конфигурации для v1. Когда версия 2 отправляется, мы создаем новый виртуальный каталог под корнем, так что теперь у нас есть https://myapi.com/v2/users/some_new_endpoint_not_in_v1. Это означает, что для сохранения исправлений нет необходимости в том, чтобы какой-либо из двоичных файлов более старых версий был затронут, что уменьшает вероятность того, что какой-либо разработчик случайно нарушит обратную совместимость для наших клиентов.

Однако я не могу понять, как настроить Swashbuckle для просмотра этих виртуальных каталогов, чтобы обработать контроллеры/действия и комментарии XML. Параметр конфигурации MultipleApiVersions кажется более нацеленным на людей, которые бросают все поддерживаемые версии в один набор двоичных файлов (либо по именам, либо по именам контроллеров), а не путем разделения их на отдельные процессы.

Любые предложения относительно того, как я могу согнуть Swashbuckle по своему желанию? Должен ли я просто устанавливать Swashbuckle в отдельные виртуальные каталоги как отдельные версии API, поэтому документы становятся чем-то вроде https://myapi.com/v1/swagger? Мой портал затем выполнит необходимую работу, чтобы разоблачить различные версии API.

Update

Я попробовать последний подход, и для документации, по крайней мере, он хорошо работает. Проблема в том, что URL-адрес для спецификации Swagger затем становится https://myapi.com/v1/swagger/docs/v1, и я бы предпочел не иметь этот второй v1 в URL-адресе. К сожалению, Swaashbuckle по крайней мере ожидает, что номер версии находится в относительном пути, а не в базовом URL-адресе.

+0

Вы посмотрели мой ответ? Подумайте о том, чтобы обозначить его как решение, если оно помогло. – bsoulier

ответ

2

Имея те будут работать:

  • Swagger UI в корневом каталоге вашего сайта API (ничего общего с Swashbuckle),
  • несколько виртуальных каталогов для ваших версий ("v1", "v2" .. .)

Для достижения этой цели:

  • обычай discoveryPat вс массив в Swagger UI Javascript будет выглядеть, как показано ниже, с добавлением «/ спецификации» суффикс (или все, что подходит вам, а SwashBuckle не обработки c.SingleApiVersion с пустым значением версии):
var currentUrl = 'https://myapi.com/'; 
window.swashbuckleConfig = { 
    rootUrl: currentUrl, 
    discoveryPaths: arrayFrom('v1/swagger/docs/spec|v2/swagger/docs/spec'), 
    booleanValues: arrayFrom('true|false'), 
    validatorUrl: stringOrNullFrom('null'), 
    // other settings ommitted for brevity. 
    oAuth2AdditionalQueryStringParams: JSON.parse('{}') 
}; 
  • Удаление c.EnableSwaggerUi из приложений вашего веб-приложения API
+0

Это не совсем решение, с которым я закончил, но это подтолкнуло меня в правильном направлении - спасибо! –

+0

В итоге я удалил пользовательский интерфейс, созданный Swashbuckle, оставив Swashbuckle исключительно для генерации определения API во время выполнения. Затем я сгенерировал пользовательский интерфейс с MVC, чтобы дать мне контроль над URL-адресами, которые были представлены разработчикам, используя виджет @ jensoleg's Bootstrap-themed of swagger-ui. Мой контроллер делает вызов vX.Y/swagger/docs/X.Y за кулисами и кэширует результаты локально. –

Смежные вопросы