Как создать спецификацию OpenApi 3.0 из существующего приложения Spring Boot?

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

Запрос функции Springfox для поддержки OpenAPI 3.0: github.com/springfox/springfox/issues/2022

Helen 29.05.2019 16:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
22
1
21 877
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете посмотреть 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-документы Не могли бы вы помочь?

pan1490 02.04.2020 14:56

«context-path» — это контекст вашего весеннего приложения, обычно это «/», если он не изменен :)

funder7 20.03.2021 00:59

Я решил реализовать свой собственный генератор 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 запущено:

Другие вопросы по теме