私は(できればYAMLで)Open API 3.0仕様を作成したいプロジェクト(Spring Boot App + Kotlin)を持っています。 Springfoxライブラリは素晴らしいですが、Swagger 2.0 JSONを生成します。コントローラーのアノテーションからOpen Api 3.0仕様を生成する最良の方法は何ですか?最初から書くのが唯一の方法ですか?
私たちはkotlinプロジェクトでspringdoc-openapiライブラリを使用しており、Spring Bootプロジェクトを使用してAPIドキュメントの生成を自動化するというニーズを満たしています。
Swagger-uiをスプリングブートアプリケーションに自動的にデプロイします
Swagger UIページは次の場所で利用可能になります。- http:// server:port/context-path/swagger-ui.html OpenAPIの説明はjson形式の次のURLで入手可能:- http:// server:port/context-path/v3/api-docs
ライブラリをプロジェクトの依存関係のリストに追加します(追加の構成は必要ありません)
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.2.32</version>
</dependency>
spring-restdocs および restdocs-api-spec を確認できます。
spring-restdocs
は、Spring-foxが使用するイントロスペクション主導のアプローチよりも多くの利点を持つ、APIドキュメンテーションへのテスト主導のアプローチを採用しています。 restdocs-api-spec
は、API仕様のサポートを追加するspring-restdocsの拡張機能です。現在、OpenAPI2 OpenAPI3およびPostmanをサポートしています。
私は自分のジェネレーターを実装することにしました https://github.com/jrcodeza/spring-openapi 多分あなたもそれをチェックすることができます。これはリフレクションに基づいており、javaxおよびスプリングアノテーションをサポートしています。また、Jacksonアノテーションに基づく継承モデル(判別子付き)を生成します。さらに、生成プロセスを変更したい場合(たとえば、独自のアノテーションがあり、スキーマの生成されたセクションを調整する必要がある場合)は、独自のインターセプターを定義できます。ランタイムモードで、またはMavenプラグインとして使用できます。 JavaクライアントジェネレーターへのOpenAPI3もあります。これは、openapi3仕様からモデルを生成します。ここでも、正しい継承のためにJavaxアノテーションとJacksonアノテーションも生成します。
Jax-rsを使用している場合、このチュートリアルが役立ちます。 Apache CXF実装を使用します。 Spring Bootを使用し、Open API 3.0仕様を生成するjaxrsの他の実装を見つけることができませんでした。
次の依存関係が必要です。
<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