Skip to content

shisyax/graqhql_spring

Repository files navigation

Spring Boot GraphQL Demo

概要

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

GraphQL API

利用可能なクエリ

  • hello: 簡単な文字列を返すクエリ
  • fib(n: Int!, start: Int! = 1): フィボナッチ数列を返すクエリ

GraphQL エンドポイント

クエリ例

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

開発

GraphQLスキーマ開発

  • スキーマファイル: 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages