Netflix DGSフレームワークを使用したSpring Boot GraphQLアプリケーション。 WebFluxによるリアクティブプログラミングとR2DBCによる非同期データベース接続を採用。
- 言語: Java 17
- フレームワーク: Spring Boot 3.5.4-SNAPSHOT
- GraphQLライブラリ: Netflix DGS (Domain Graph Service)
- リアクティブWeb: Spring WebFlux
- データベース: H2 Database (インメモリ)
- データアクセス: Spring Data R2DBC
- ビルドツール: Gradle (Kotlin DSL)
- テスト: JUnit 5, Spring Boot Test
- hello: 簡単な文字列を返すクエリ
- fib(n: Int!, start: Int! = 1): フィボナッチ数列を返すクエリ
- GraphQL API: http://localhost:8080/graphql
- GraphiQL UI: http://localhost:8080/graphiql (開発時のクエリテスト用)
query { hello }
query { fib(n: 5, start: 1) }
query { fib(n: 5, start: 2) }
- データベース: H2インメモリデータベース
- 接続方式: R2DBC(リアクティブ)
- 開発ツール: H2コンソール
- Java 17以上
- Gradle 7.0以上
- H2 Database
┌─────────────────────────────────────────────────────────────┐
│ クライアント層 │
├─────────────────────────────────────────────────────────────┤
│ GraphiQL UI │ 外部GraphQLクライアント │
│ (開発・テスト用) │ (Web/Mobile アプリケーション) │
└─────────────────────────────────────────────────────────────┘
│
│ HTTP/GraphQL
▼
┌─────────────────────────────────────────────────────────────┐
│ Web層 (Spring WebFlux) │
├─────────────────────────────────────────────────────────────┤
│ GraphQL Endpoint (/graphql) │
│ - リクエスト受信 │
│ - レスポンス生成 │
│ - エラーハンドリング │
└─────────────────────────────────────────────────────────────┘
│
│ GraphQL Query/Mutation
▼
┌─────────────────────────────────────────────────────────────┐
│ GraphQL層 (Netflix DGS) │
├─────────────────────────────────────────────────────────────┤
└─────────────────────────────────────────────────────────────┘
│
│ (未実装)
▼
┌─────────────────────────────────────────────────────────────┐
│ データアクセス層 (R2DBC) │
├─────────────────────────────────────────────────────────────┤
│ Spring Data R2DBC Repository │
│ - リアクティブデータアクセス │
│ - 非同期データベース操作 │
│ - Mono/Flux リアクティブストリーム │
└─────────────────────────────────────────────────────────────┘
│
│ R2DBC Driver
▼
┌─────────────────────────────────────────────────────────────┐
│ データベース層 │
├─────────────────────────────────────────────────────────────┤
│ H2 Database (インメモリ) │
│ - 開発・テスト用 │
│ - 高速なデータアクセス │
│ - トランザクション管理 │
└─────────────────────────────────────────────────────────────┘
git clone cd demo
./gradlew build
./gradlew bootRun
- スキーマファイル:
src/main/resources/schema/schema.graphqls
- データフェッチャー:
src/main/java/com/example/demo/graphql/
./gradlew test
- IDE: IntelliJ IDEA推奨
- Spring Boot DevToolsによるホットリロード対応
- GraphiQL UIによるクエリテスト環境
- FibonacciFetcher: メモ化による効率的なフィボナッチ数列計算
- リアクティブプログラミング: WebFluxによる非同期処理
- R2DBC: 非同期データベースアクセス
- GraphiQLによるインタラクティブなクエリテスト
- 包括的なテストカバレッジ
- Spring Boot DevToolsによる高速開発サイクル
Apache License 2.0