Spring Boot × Springdoc:Swagger UIで開発効率を向上させる方法
API開発において、ドキュメント作成は避けて通れない道です。しかし、手動でドキュメントを更新し続けるのは手間がかかり、時間が経つにつれてドキュメントとAPIの整合性が崩れてしまうことも少なくありません。そこで役立つのが、Swagger(OpenAPI)と、それをSpring Bootで簡単に利用するためのライブラリであるSpringdocです。
本記事では、Spring BootとSpringdocを組み合わせることで、Swagger UIを利用して開発効率を大幅に向上させる方法を詳細に解説します。Swaggerの基本概念から始まり、Springdocの設定、APIドキュメントのカスタマイズ、セキュリティ設定、そして高度な利用方法まで、網羅的にカバーします。この記事を読めば、Swagger UIを活用してAPI開発を効率化し、高品質なAPIを提供するための知識とスキルを習得できるでしょう。
目次
- Swagger(OpenAPI)とは
- Swaggerの歴史と進化
- OpenAPI Specificationの概要
- Swagger UI、Swagger Editor、Swagger Codegen
- Springdocとは
- SpringdocとSpringfoxの比較
- Springdocのメリット
- Spring BootプロジェクトへのSpringdocの導入
- Maven/Gradleの設定
- 基本的な設定と実行
- Swagger UIへのアクセス
- APIドキュメントの自動生成
- Spring MVCアノテーションによる記述
@Operation
アノテーションによる詳細な記述@Parameter
アノテーションによるパラメータの説明@ApiResponse
アノテーションによるレスポンスの説明@RequestBody
アノテーションによるリクエストボディの説明@Schema
アノテーションによるスキーマ定義
- APIドキュメントのカスタマイズ
OpenAPI
Beanによる全体的な設定GroupedOpenApi
BeanによるAPIグループ化Components
Beanによる再利用可能な定義Tags
Beanによるタグの定義- カスタムアノテーションによる記述の簡略化
- セキュリティ設定
- API Key認証の設定
- OAuth2認証の設定
- JWT認証の設定
- Spring Securityとの連携
- 高度な利用方法
- Swagger UIのカスタマイズ
- multipart/form-dataのサポート
- Bean Validationとの連携
- 外部APIドキュメントの取り込み
- Swagger Codegenによるクライアントコード生成
- 実践的な例:RESTful API開発
- 書籍管理APIの設計
- Spring BootでのAPI実装
- Springdocによるドキュメント自動生成
- Swagger UIによるAPIのテスト
- トラブルシューティング
- よくあるエラーと解決策
- Springdocのバージョンアップ時の注意点
- まとめ:SpringdocとSwagger UIでAPI開発を加速
1. Swagger(OpenAPI)とは
Swaggerは、APIの設計、構築、文書化、利用を容易にするための包括的なフレームワークです。単なるツールではなく、API開発ライフサイクル全体をサポートするエコシステムと言えます。
1.1 Swaggerの歴史と進化
Swaggerは、2011年にTony Tamによって開発されたSwagger UIから始まりました。当初はAPIドキュメントの視覚化に特化したツールでしたが、その後、APIの設計、構築、利用を支援するさまざまなツールが追加され、フレームワークとして進化しました。
2015年には、SmartBear SoftwareがSwaggerの管理を引き継ぎ、OpenAPI Initiativeというオープンソースプロジェクトを設立しました。OpenAPI Initiativeは、API記述のための標準仕様を策定・維持することを目的としており、Swagger SpecificationはOpenAPI Specificationとして標準化されました。
現在、SwaggerはOpenAPI Specificationを実装したフレームワークとして、世界中の多くの企業や開発者に利用されています。
1.2 OpenAPI Specificationの概要
OpenAPI Specification(OAS)は、RESTful APIのインターフェースを記述するための標準的な仕様です。OASは、APIのエンドポイント、パラメータ、リクエストボディ、レスポンス、認証方法などを、人間にも機械にも理解しやすい形式で記述することができます。
OASは、YAMLまたはJSON形式で記述され、APIの動作を明確に定義します。OASに基づいて、Swagger UIのようなツールでドキュメントを生成したり、Swagger Codegenのようなツールでクライアントコードを生成したりすることができます。
OASの主要な要素は以下の通りです。
- openapi: OpenAPI Specificationのバージョン
- info: APIに関する情報(タイトル、説明、バージョンなど)
- servers: APIの提供サーバーの情報(URLなど)
- paths: APIのエンドポイントと操作(GET、POST、PUT、DELETEなど)
- components: 再利用可能な定義(スキーマ、セキュリティスキームなど)
- tags: APIのエンドポイントを分類するためのタグ
1.3 Swagger UI、Swagger Editor、Swagger Codegen
Swaggerフレームワークには、API開発を支援するさまざまなツールが含まれています。代表的なツールは以下の通りです。
- Swagger UI: OpenAPI Specificationに基づいて、APIドキュメントを視覚的に表示するツールです。APIのエンドポイント、パラメータ、レスポンスなどをブラウザ上で確認し、実際にAPIを試すことができます。
- Swagger Editor: OpenAPI Specificationを記述するためのエディタです。構文チェックや補完機能が充実しており、YAML/JSON形式でOASファイルを簡単に作成・編集できます。
- Swagger Codegen: OpenAPI Specificationに基づいて、クライアントコード(Java、Python、JavaScriptなど)やサーバーコード(Spring、Node.jsなど)を自動生成するツールです。APIクライアントの開発や、APIサーバーのスケルトン作成を効率化できます。
2. Springdocとは
Springdocは、Spring BootアプリケーションにSwagger(OpenAPI)の機能を統合するためのライブラリです。Spring MVCのアノテーションやJSR-303/349のBean Validationアノテーションに基づいて、APIドキュメントを自動生成します。
2.1 SpringdocとSpringfoxの比較
Springdocは、以前主流だったSpringfoxに代わる、より現代的で軽量なライブラリです。SpringfoxはSwagger 2.0をサポートしていましたが、SpringdocはOpenAPI 3.0をサポートしており、最新のAPI仕様に対応しています。
Springfoxはメンテナンスが停滞しており、Spring Bootの最新バージョンとの互換性に問題が生じる可能性があります。一方、Springdocは活発に開発されており、Spring Bootの最新バージョンに迅速に対応しています。
2.2 Springdocのメリット
Springdocを利用するメリットは数多くあります。
- APIドキュメントの自動生成: Spring MVCのアノテーションに基づいて、APIドキュメントを自動的に生成します。手動でドキュメントを作成・更新する手間を大幅に削減できます。
- OpenAPI 3.0のサポート: 最新のOpenAPI 3.0仕様に対応しており、より表現力豊かなAPIドキュメントを作成できます。
- Spring Bootの最新バージョンへの対応: Spring Bootの最新バージョンに迅速に対応しており、常に最新の機能を利用できます。
- 簡単な設定: わずかな設定でSpringdocを導入し、Swagger UIを利用できます。
- 豊富なカスタマイズオプション: APIドキュメントを細かくカスタマイズするためのオプションが豊富に用意されています。
- Bean Validationとの連携: Bean Validationのアノテーションに基づいて、バリデーションルールをAPIドキュメントに反映できます。
- セキュリティ設定のサポート: API Key認証、OAuth2認証、JWT認証などのセキュリティ設定を簡単に組み込むことができます。
3. Spring BootプロジェクトへのSpringdocの導入
SpringdocをSpring Bootプロジェクトに導入する手順を解説します。
3.1 Maven/Gradleの設定
まず、Springdocの依存関係をMavenまたはGradleのビルドファイルに追加します。
Mavenの場合:
xml
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>最新バージョン</version>
</dependency>
Gradleの場合:
gradle
dependencies {
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:最新バージョン'
}
最新バージョン
の部分は、Springdocの最新バージョンに置き換えてください。Springdocの公式ドキュメントで最新バージョンを確認できます。
3.2 基本的な設定と実行
Springdocの導入はこれだけで完了です。特別な設定は不要で、アプリケーションを起動すると、自動的にAPIドキュメントが生成されます。
3.3 Swagger UIへのアクセス
アプリケーションを起動後、ブラウザで以下のURLにアクセスすると、Swagger UIが表示されます。
http://localhost:8080/swagger-ui.html
ポート番号(8080)は、アプリケーションの設定に合わせて変更してください。
Swagger UIには、APIのエンドポイント、パラメータ、レスポンスなどが一覧表示され、実際にAPIを試すことができます。
4. APIドキュメントの自動生成
Springdocは、Spring MVCのアノテーションやJSR-303/349のBean Validationアノテーションに基づいて、APIドキュメントを自動生成します。ここでは、APIドキュメントを効果的に記述するためのアノテーションについて解説します。
4.1 Spring MVCアノテーションによる記述
@RestController
、@RequestMapping
、@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
などのSpring MVCのアノテーションは、APIのエンドポイントやHTTPメソッドを定義するために使用されます。これらのアノテーションを使用することで、Springdocは自動的にAPIのエンドポイントをドキュメント化します。
例えば、以下のコードは、/books
というエンドポイントでGETリクエストを処理するAPIを定義します。
“`java
@RestController
@RequestMapping(“/books”)
public class BookController {
@GetMapping
public List<Book> getBooks() {
// 書籍の一覧を返す処理
}
}
“`
このコードに基づいて、SpringdocはSwagger UIに/books
というエンドポイントを表示します。
4.2 @Operation
アノテーションによる詳細な記述
@Operation
アノテーションは、APIのエンドポイントに関する詳細な情報を記述するために使用されます。summary
、description
、tags
などの属性を設定することで、APIドキュメントをより分かりやすくすることができます。
java
@GetMapping
@Operation(summary = "書籍の一覧を取得する", description = "登録されている書籍の一覧を返します。", tags = {"書籍"})
public List<Book> getBooks() {
// 書籍の一覧を返す処理
}
summary
属性は、APIの概要を記述します。description
属性は、APIの詳細な説明を記述します。tags
属性は、APIを分類するためのタグを指定します。
4.3 @Parameter
アノテーションによるパラメータの説明
@Parameter
アノテーションは、APIのパラメータに関する情報を記述するために使用されます。name
、description
、required
、schema
などの属性を設定することで、パラメータの説明を詳細に記述することができます。
java
@GetMapping("/{id}")
@Operation(summary = "書籍をIDで取得する", description = "指定されたIDの書籍を返します。", tags = {"書籍"})
public Book getBook(@Parameter(name = "id", description = "書籍のID", required = true) @PathVariable Long id) {
// IDに基づいて書籍を返す処理
}
name
属性は、パラメータの名前を指定します。description
属性は、パラメータの説明を記述します。required
属性は、パラメータが必須かどうかを指定します。schema
属性は、パラメータの型を指定します。
4.4 @ApiResponse
アノテーションによるレスポンスの説明
@ApiResponse
アノテーションは、APIのレスポンスに関する情報を記述するために使用されます。responseCode
、description
、content
などの属性を設定することで、レスポンスの説明を詳細に記述することができます。
java
@GetMapping("/{id}")
@Operation(summary = "書籍をIDで取得する", description = "指定されたIDの書籍を返します。", tags = {"書籍"})
@ApiResponse(responseCode = "200", description = "書籍の取得に成功", content = @Content(schema = @Schema(implementation = Book.class)))
@ApiResponse(responseCode = "404", description = "書籍が見つからない")
public Book getBook(@Parameter(name = "id", description = "書籍のID", required = true) @PathVariable Long id) {
// IDに基づいて書籍を返す処理
}
responseCode
属性は、HTTPレスポンスコードを指定します。description
属性は、レスポンスの説明を記述します。content
属性は、レスポンスボディのスキーマを指定します。@Schema(implementation = Book.class)
は、レスポンスボディの型がBook
クラスであることを示します。
4.5 @RequestBody
アノテーションによるリクエストボディの説明
@RequestBody
アノテーションは、APIのリクエストボディに関する情報を記述するために使用されます。@Schema
アノテーションと組み合わせて使用することで、リクエストボディのスキーマを詳細に記述することができます。
java
@PostMapping
@Operation(summary = "書籍を登録する", description = "新しい書籍を登録します。", tags = {"書籍"})
public Book createBook(@RequestBody Book book) {
// 書籍を登録する処理
}
@RequestBody Book book
は、リクエストボディがBook
クラスであることを示します。Book
クラスのフィールドに@Schema
アノテーションを追加することで、各フィールドの説明を記述することができます。
4.6 @Schema
アノテーションによるスキーマ定義
@Schema
アノテーションは、APIのパラメータやリクエストボディ、レスポンスボディのスキーマを定義するために使用されます。description
、type
、format
、example
などの属性を設定することで、スキーマを詳細に記述することができます。
“`java
public class Book {
@Schema(description = "書籍のID", example = "123")
private Long id;
@Schema(description = "書籍のタイトル", example = "Effective Java")
private String title;
@Schema(description = "書籍の著者", example = "Joshua Bloch")
private String author;
// ゲッター、セッター
}
“`
description
属性は、フィールドの説明を記述します。example
属性は、フィールドの例を示します。
5. APIドキュメントのカスタマイズ
Springdocは、APIドキュメントを細かくカスタマイズするためのオプションを豊富に用意しています。ここでは、APIドキュメントをカスタマイズする方法について解説します。
5.1 OpenAPI
Beanによる全体的な設定
OpenAPI
Beanを定義することで、APIドキュメント全体の設定をカスタマイズすることができます。info
、servers
、components
などの属性を設定することで、APIのタイトル、説明、バージョン、サーバーの情報、セキュリティスキームなどを設定することができます。
“`java
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info().title("書籍管理API").version("v1").description("書籍を管理するためのAPI"));
}
}
“`
5.2 GroupedOpenApi
BeanによるAPIグループ化
GroupedOpenApi
Beanを定義することで、APIのエンドポイントをグループ化することができます。pathsToMatch
属性を設定することで、特定のパスに一致するエンドポイントをグループ化することができます。
“`java
@Configuration
public class OpenAPIConfig {
@Bean
public GroupedOpenApi bookApi() {
return GroupedOpenApi.builder().group("書籍").pathsToMatch("/books/**").build();
}
@Bean
public GroupedOpenApi authorApi() {
return GroupedOpenApi.builder().group("著者").pathsToMatch("/authors/**").build();
}
}
“`
この設定により、/books/**
に一致するエンドポイントは「書籍」グループに、/authors/**
に一致するエンドポイントは「著者」グループに分類されます。Swagger UIでは、グループごとにAPIドキュメントを表示することができます。
5.3 Components
Beanによる再利用可能な定義
Components
Beanを定義することで、再利用可能な定義(スキーマ、セキュリティスキームなど)を定義することができます。schemas
属性やsecuritySchemes
属性を設定することで、APIドキュメント全体で共有される定義を作成することができます。
“`java
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("bearerAuth", new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")));
}
}
“`
この設定により、bearerAuth
という名前のセキュリティスキームが定義されます。@SecurityRequirement
アノテーションを使用することで、特定のエンドポイントにこのセキュリティスキームを適用することができます。
5.4 Tags
Beanによるタグの定義
Tags
Beanを定義することで、APIドキュメントで使用するタグを定義することができます。タグの説明や外部ドキュメントへのリンクなどを設定することができます。
“`java
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.tags(List.of(new Tag().name("書籍").description("書籍に関するAPI")));
}
}
“`
5.5 カスタムアノテーションによる記述の簡略化
APIドキュメントの記述を簡略化するために、カスタムアノテーションを作成することができます。カスタムアノテーションは、複数のアノテーションを組み合わせることで、繰り返し使用するパターンを簡潔に表現することができます。
例えば、@GetMapping
と@Operation
アノテーションを組み合わせた@GetBook
アノテーションを作成することができます。
java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@GetMapping
@Operation(summary = "書籍をIDで取得する", description = "指定されたIDの書籍を返します。", tags = {"書籍"})
public @interface GetBook {
}
このカスタムアノテーションを使用することで、以下のように記述を簡略化することができます。
java
@GetBook("/{id}")
public Book getBook(@Parameter(name = "id", description = "書籍のID", required = true) @PathVariable Long id) {
// IDに基づいて書籍を返す処理
}
6. セキュリティ設定
APIのセキュリティを確保するために、SpringdocはAPI Key認証、OAuth2認証、JWT認証などのセキュリティ設定をサポートしています。
6.1 API Key認証の設定
API Key認証は、APIリクエストにAPI Keyを含めることで認証を行う方法です。SecurityScheme
Beanを定義し、type
をSecurityScheme.Type.APIKEY
に設定することで、API Key認証を設定することができます。
“`java
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("apiKeyAuth", new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.name("X-API-Key")));
}
}
“`
この設定により、X-API-Key
という名前のヘッダーにAPI Keyを含めることで認証を行うことができます。@SecurityRequirement
アノテーションを使用することで、特定のエンドポイントにAPI Key認証を適用することができます。
6.2 OAuth2認証の設定
OAuth2認証は、APIリクエストにアクセストークンを含めることで認証を行う方法です。SecurityScheme
Beanを定義し、type
をSecurityScheme.Type.OAUTH2
に設定することで、OAuth2認証を設定することができます。
“`java
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("oauth2", new SecurityScheme()
.type(SecurityScheme.Type.OAUTH2)
.flows(new OAuthFlows()
.authorizationCode(new OAuthFlow()
.authorizationUrl("https://example.com/oauth2/authorize")
.tokenUrl("https://example.com/oauth2/token")))));
}
}
“`
この設定により、OAuth2認証を行うことができます。Swagger UIでは、認可サーバーにリダイレクトされ、アクセストークンを取得することができます。@SecurityRequirement
アノテーションを使用することで、特定のエンドポイントにOAuth2認証を適用することができます。
6.3 JWT認証の設定
JWT認証は、APIリクエストにJSON Web Token (JWT) を含めることで認証を行う方法です。SecurityScheme
Beanを定義し、type
をSecurityScheme.Type.HTTP
、scheme
をbearer
に設定することで、JWT認証を設定することができます。
“`java
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("bearerAuth", new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")));
}
}
“`
この設定により、Authorization
ヘッダーにBearer
スキームでJWTを含めることで認証を行うことができます。Swagger UIでは、JWTを入力することで、APIを試すことができます。@SecurityRequirement
アノテーションを使用することで、特定のエンドポイントにJWT認証を適用することができます。
6.4 Spring Securityとの連携
Springdocは、Spring Securityと連携して、APIドキュメントにセキュリティ情報を反映することができます。Spring Securityで定義された認証・認可ルールに基づいて、APIドキュメントを自動的に生成することができます。
Spring SecurityとSpringdocを連携するには、springdoc-openapi-security
という依存関係を追加する必要があります。
xml
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-security</artifactId>
<version>最新バージョン</version>
</dependency>
Spring Securityの設定に基づいて、Springdocは自動的にAPIドキュメントを生成します。例えば、特定のロールを持つユーザーのみがアクセスできるエンドポイントは、Swagger UIでそのロールを持つユーザーのみが表示されます。
7. 高度な利用方法
Springdocには、API開発をさらに効率化するための高度な利用方法が多数用意されています。
7.1 Swagger UIのカスタマイズ
Swagger UIの外観や動作をカスタマイズすることができます。Swagger UIのテーマを変更したり、ロゴを変更したり、カスタムJavaScriptを追加したりすることができます。
Swagger UIのカスタマイズは、application.properties
またはapplication.yml
ファイルで行います。
properties
springdoc.swagger-ui.path=/swagger-ui
springdoc.swagger-ui.config-url=/v3/api-docs/swagger-config
springdoc.swagger-ui.oauth2-redirect-url=/oauth2-redirect.html
springdoc.swagger-ui.path
は、Swagger UIのパスを設定します。springdoc.swagger-ui.config-url
は、Swagger UIの設定ファイルのURLを設定します。springdoc.swagger-ui.oauth2-redirect-url
は、OAuth2認証のリダイレクトURLを設定します。
7.2 multipart/form-dataのサポート
Springdocは、multipart/form-data
形式のリクエストボディをサポートしています。@RequestPart
アノテーションを使用することで、ファイルアップロードを含むAPIドキュメントを自動生成することができます。
java
@PostMapping("/upload")
@Operation(summary = "ファイルをアップロードする", description = "ファイルをアップロードします。", tags = {"ファイル"})
public String uploadFile(@RequestPart("file") MultipartFile file) {
// ファイルアップロード処理
}
7.3 Bean Validationとの連携
Springdocは、JSR-303/349のBean Validationのアノテーションと連携して、バリデーションルールをAPIドキュメントに反映することができます。@NotNull
、@Size
、@Pattern
などのアノテーションを使用することで、バリデーションルールをAPIドキュメントに自動的に表示することができます。
“`java
public class Book {
@NotNull
@Size(min = 1, max = 255)
@Schema(description = "書籍のタイトル", example = "Effective Java")
private String title;
@NotNull
@Size(min = 1, max = 255)
@Schema(description = "書籍の著者", example = "Joshua Bloch")
private String author;
// ゲッター、セッター
}
“`
7.4 外部APIドキュメントの取り込み
Springdocは、外部のAPIドキュメント(OpenAPI Specificationファイル)を取り込むことができます。springdoc.api-docs.path
プロパティを設定することで、外部APIドキュメントのURLを指定することができます。
properties
springdoc.api-docs.path=/api-docs
springdoc.api-docs.urls.0=https://petstore3.swagger.io/api/v3/openapi.json
7.5 Swagger Codegenによるクライアントコード生成
Swagger Codegenを使用することで、OpenAPI Specificationに基づいて、クライアントコード(Java、Python、JavaScriptなど)を自動生成することができます。APIクライアントの開発を効率化することができます。
Swagger Codegenは、コマンドラインツールとして提供されています。
bash
java -jar swagger-codegen-cli.jar generate -i swagger.json -l java -o output
8. 実践的な例:RESTful API開発
ここでは、書籍管理APIを例に、Spring BootとSpringdocを組み合わせてRESTful APIを開発する具体的な手順を解説します。
8.1 書籍管理APIの設計
書籍管理APIは、書籍の登録、取得、更新、削除を行うためのAPIです。以下のエンドポイントを定義します。
/books
(GET): 書籍の一覧を取得する/books/{id}
(GET): 指定されたIDの書籍を取得する/books
(POST): 新しい書籍を登録する/books/{id}
(PUT): 指定されたIDの書籍を更新する/books/{id}
(DELETE): 指定されたIDの書籍を削除する
8.2 Spring BootでのAPI実装
Spring Bootで上記のAPIを実装します。
“`java
@RestController
@RequestMapping(“/books”)
public class BookController {
@Autowired
private BookService bookService;
@GetMapping
@Operation(summary = "書籍の一覧を取得する", description = "登録されている書籍の一覧を返します。", tags = {"書籍"})
public List<Book> getBooks() {
return bookService.getBooks();
}
@GetMapping("/{id}")
@Operation(summary = "書籍をIDで取得する", description = "指定されたIDの書籍を返します。", tags = {"書籍"})
@ApiResponse(responseCode = "200", description = "書籍の取得に成功", content = @Content(schema = @Schema(implementation = Book.class)))
@ApiResponse(responseCode = "404", description = "書籍が見つからない")
public Book getBook(@Parameter(name = "id", description = "書籍のID", required = true) @PathVariable Long id) {
return bookService.getBook(id);
}
@PostMapping
@Operation(summary = "書籍を登録する", description = "新しい書籍を登録します。", tags = {"書籍"})
public Book createBook(@RequestBody Book book) {
return bookService.createBook(book);
}
@PutMapping("/{id}")
@Operation(summary = "書籍を更新する", description = "指定されたIDの書籍を更新します。", tags = {"書籍"})
public Book updateBook(@Parameter(name = "id", description = "書籍のID", required = true) @PathVariable Long id, @RequestBody Book book) {
return bookService.updateBook(id, book);
}
@DeleteMapping("/{id}")
@Operation(summary = "書籍を削除する", description = "指定されたIDの書籍を削除します。", tags = {"書籍"})
public void deleteBook(@Parameter(name = "id", description = "書籍のID", required = true) @PathVariable Long id) {
bookService.deleteBook(id);
}
}
“`
8.3 Springdocによるドキュメント自動生成
Springdocを導入していれば、上記の実装に基づいてAPIドキュメントが自動的に生成されます。Swagger UIにアクセスすると、APIのエンドポイント、パラメータ、レスポンスなどが一覧表示されます。
8.4 Swagger UIによるAPIのテスト
Swagger UIを使用して、実際にAPIを試すことができます。APIのエンドポイントを選択し、パラメータを入力して、リクエストを送信することができます。レスポンスボディやHTTPレスポンスコードを確認することで、APIの動作を確認することができます。
9. トラブルシューティング
Springdocを利用する際に発生する可能性のあるエラーと解決策について解説します。
9.1 よくあるエラーと解決策
- Swagger UIが表示されない:
springdoc-openapi-starter-webmvc-ui
依存関係が正しく設定されているか確認してください。また、application.properties
またはapplication.yml
ファイルでspringdoc.swagger-ui.enabled
プロパティがtrue
に設定されているか確認してください。 - APIドキュメントが正しく生成されない: Spring MVCのアノテーションやJSR-303/349のBean Validationアノテーションが正しく使用されているか確認してください。また、
@Operation
、@Parameter
、@ApiResponse
などのアノテーションを使用して、APIドキュメントを詳細に記述してください。 - セキュリティ設定が正しく動作しない:
SecurityScheme
Beanが正しく定義されているか確認してください。また、@SecurityRequirement
アノテーションを使用して、特定のエンドポイントにセキュリティスキームが正しく適用されているか確認してください。
9.2 Springdocのバージョンアップ時の注意点
Springdocのバージョンアップを行う際には、APIの変更や設定の変更が必要になる場合があります。Springdocの公式ドキュメントで、バージョンアップに伴う変更点を確認してください。
10. まとめ:SpringdocとSwagger UIでAPI開発を加速
本記事では、Spring BootとSpringdocを組み合わせることで、Swagger UIを利用して開発効率を大幅に向上させる方法を詳細に解説しました。Swaggerの基本概念から始まり、Springdocの設定、APIドキュメントのカスタマイズ、セキュリティ設定、そして高度な利用方法まで、網羅的にカバーしました。
SpringdocとSwagger UIを活用することで、API開発の効率を大幅に向上させ、高品質なAPIを迅速に提供することができます。API開発に携わるすべての開発者に、SpringdocとSwagger UIの活用をおすすめします。