У меня есть проект (Spring Boot App + Kotlin), для которого я хотел бы иметь спецификацию Open API 3.0 (желательно в YAML). Библиотеки Springfox хороши, но они генерируют Swagger 2.0 JSON. Как лучше всего создать спецификацию Open Api 3.0 на основе аннотаций в моих контроллерах? Единственный способ написать это с нуля?




Вы можете посмотреть spring-restdocs и restdocs-api-spec.
spring-restdocs использует подход к документации API, основанный на тестировании, который имеет много преимуществ по сравнению с подходом, основанным на самоанализе, который использует Spring-Fox. restdocs-api-spec — это расширение для spring-restdocs, добавляющее поддержку спецификаций API. В настоящее время он поддерживает OpenAPI2 OpenAPI3 и Postman.
Если вы используете jax-rs, это руководство поможет. Он использует реализацию Apache CXF. Я не смог найти никакой другой реализации jaxrs, которая использует Spring Boot и генерирует спецификацию Open API 3.0.
Вам понадобятся следующие зависимости:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-service-description-openapi-v3</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>3.13.6</version>
</dependency>
Вот общая конфигурация, подробнее по ссылке:
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = PeopleRestService.class)
public class AppConfig {
@Autowired private PeopleRestService peopleRestService;
@Bean(destroyMethod = "destroy")
public Server jaxRsServer(Bus bus) {
final JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
factory.setApplication(new JaxRsApiApplication());
factory.setServiceBean(peopleRestService);
factory.setProvider(new JacksonJsonProvider());
factory.setFeatures(Arrays.asList(new OpenApiFeature()));
factory.setBus(bus);
factory.setAddress("/");
return factory.create();
}
@Bean
public ServletRegistrationBean cxfServlet() {
final ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/api/*");
servletRegistrationBean.setLoadOnStartup(1);
return servletRegistrationBean;
}
}
https://dzone.com/articles/moving-with-the-times-towards-openapi-v300-adoptio
Мы использовали библиотеку springdoc-openapi в нашем проекте kotlin, и она отвечает нашим потребностям в автоматизации создания документации API с использованием проектов загрузки Spring.
Он автоматически развертывает swagger-ui в приложении Spring-Boot.
После этого страница пользовательского интерфейса Swagger должна быть доступна по адресу: - http://сервер:порт/контекстный-путь/swagger-ui.html Описание OpenAPI будет доступно по следующему адресу для формата json: - http://сервер:порт/контекстный-путь/v3/api-docs
Добавьте библиотеку в список зависимостей вашего проекта (дополнительная настройка не требуется)
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.2.32</version>
</dependency>
Я добавил эту зависимость в pom. Баночка загружена. Он добавлен в зависимости от maven, но я не могу увидеть описание OpenApi по указанному вами пути. Для меня путь: локальный: 15730/контекстный путь/v3/API-документы Не могли бы вы помочь?
«context-path» — это контекст вашего весеннего приложения, обычно это «/», если он не изменен :)
Я решил реализовать свой собственный генератор https://github.com/jrcodeza/spring-openapi, возможно, вы тоже можете его проверить. Он основан на отражении и поддерживает аннотации javax и spring. Он также генерирует модель наследования (с дискриминаторами) на основе аннотаций Джексона. Кроме того, вы можете определить свои собственные перехватчики, если хотите изменить процесс генерации (например, когда у вас есть собственные аннотации и вам нужно настроить сгенерированные разделы схемы). Вы можете использовать его в режиме выполнения или в качестве плагина maven. Существует также генератор клиента OpenAPI3 для java, который генерирует модель из спецификации openapi3. Опять же, он генерирует также аннотации Javax и аннотации Джексона для правильного наследования.
Вы также можете обратиться к https://www.baeldung.com/spring-rest-openapi-documentation который предоставляет руководство по реализации OpenAPI 3.0 с приложением SpringBoot 1.x или 2.x с использованием springdoc-openapi.
Подводя итог, вы просто добавляете зависимость maven для springdoc-openapi в свое приложение, и когда вы загружаетесь, переходите к пути http://сервер:порт/v3/api-docs.yaml/, и вы загрузите файл спецификации Open API 3.0 в формате yaml, сгенерированный из кода вашего приложения.
Вы можете сделать некоторые другие вещи с помощью springdoc-openapi, обратившись к следующему, когда ваше приложение SpringBoot запущено:
http://сервер:порт/v3/апи-документы: дает файл спецификации в формате Json.
http://сервер:порт/swagger-ui.html: зайдите в свой браузер, и вы увидите документацию по чванству.
Запрос функции Springfox для поддержки OpenAPI 3.0: github.com/springfox/springfox/issues/2022