Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20220605 GraphQL実装してみた
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
mabubu0203
June 26, 2022
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20220605 GraphQL実装してみた
20220605にGraphQLの話をした時の資料
mabubu0203
June 26, 2022
More Decks by mabubu0203
See All by mabubu0203
X Follow Checkup
mabubu0203
0
11
バイブコーディングの紹介
mabubu0203
0
72
ペットの迷子を解決(20230929)
mabubu0203
0
460
20221013 (Web)API仕様書を作る理由
mabubu0203
0
650
20210927 転職活動のお話
mabubu0203
0
190
Other Decks in Technology
See All in Technology
20分でわかるセキュアAPI
nwiizo
2
310
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
180
Android skills に学ぶ
kokiko
0
120
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
590
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
560
Digitization部 紹介資料
sansan33
PRO
2
7.7k
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
2
340
【GCC2026】鉄拳8でのVFX開発事例
bandainamcostudios
PRO
0
120
猫付きpingコマンドを自作
uyuki234
0
260
DDDのエッセンスを取り入れたAIでの開発
ak2ie
0
150
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
170
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.5k
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Exploring anti-patterns in Rails
aemeredith
3
470
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
We Have a Design System, Now What?
morganepeng
55
8.3k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Technical Leadership for Architectural Decision Making
baasie
3
510
Color Theory Basics | Prateek | Gurzu
gurzu
0
430
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
430
Transcript
GraphQL実装してみた / SpringBoot 2.7.0〜 mabubu0203
自己紹介 2017:Swaggerによる開発を経験する Excelで仕様書を作成し、yamlを出力させていた 2020:OpenAPI Generatorによる開発を経験する Yahooの開発手法を参考にした
アジェンダ ・GraphQLの仕様紹介 ・REST APIとなにがちがうのか ・Java(SpringBoot)で実装してみた ・Postman/phpmyadmin等で確認してみる ・感想
GraphQLの仕様紹介 - GraphQL とは by RedHat - よくまとまっている - 単一のエンドポイントを提供する
- クライアントとサーバーの1回のリクエストで複数のリソースを参照/書込可能 - クライアントは欲しいフィールドのみ指定してリクエストすることが可能
GraphQLの仕様紹介 ~REST APIとなにがちがうのか ~ - GraphQL とは by RedHat -
よくまとまっている - 単一のエンドポイントを提供する - クライアントとサーバーの1回のリクエストで複数のリソースを参照/書込可能 - クライアントは欲しいフィールドのみ指定してリクエストすることが可能
Java(SpringBoot)で実装してみた 1. GraphQL定義を作成 2. GraphQL定義からコードを自動生成(Gradle ✖ Netflixプラグイン) - リクエストとレスポンスのモデルを生成 3.
生成したコードを用いて実装
Java(SpringBoot)で実装してみた 1. GraphQL定義を作成 2. GraphQL定義からコードを自動生成(Gradle ✖ Netflixプラグイン) - リクエストとレスポンスのモデルを生成 3.
自動生成したコードを用いて実装 Language:Java 17 FW:Spring Boot 2.7.0 Library: - Spring for GraphQL 1.0.0 - Spring WebFlux - Spring Data R2DBC - DGS Code Generation Plugin Build Tool:Gradle 7.4.2 DB: - MySQL 8.0 - Elasticsearch Github: - https://github.com/mabubu0203/catcafe-graph-ql/tree/v1.2.0 - https://mabubu0203.github.io/catcafe-graph-ql
Java(SpringBoot)で実装してみた 1. GraphQL定義を作成 2. GraphQL定義からコードを自動生成(Gradle ✖ Netflixプラグイン) - リクエストとレスポンスのモデルを生成 3.
自動生成したコードを用いて実装 - GraphQL言語に対応したエディタプラグインが存在する - 下記の型定義に沿って記載する - Scalar types - ID , Int , Float , String , Boolean - 独自の型を定義できる - Enumあるよ - Objectあるよ - リストあるよ - Nullable , NonNullあるよ - 注釈つけられるよ - ファイル分割できるよ
Java(SpringBoot)で実装してみた 1. GraphQL定義を作成 2. GraphQL定義からコードを自動生成(Gradle ✖ Netflixプラグイン) - リクエストとレスポンスのモデルを生成 3.
自動生成したコードを用いて実装 - Application Layerで利用できるClassを生成 - 仕様書とコードが完全に一致する - フレームワークに依存しない - Constructor , Getter/Setter/equals/hashCode/Builders を生成 - クライアント側のコードも生成できる - ビルド時に都度実行するため、バージョン管理には乗せない
Java(SpringBoot)で実装してみた 1. GraphQL定義を作成 2. GraphQL定義からコードを自動生成(Gradle ✖ Netflixプラグイン) - リクエストとレスポンスのモデルを生成 3.
生成したコードを用いて実装 - Application Layerで技術仕様を吸収すれば、普段の RestAPIの実装と同じな印象 - Spring for GraphQLのおかげ
Java(SpringBoot)で実装してみた ~Postman/phpmyadmin等で確認してみる 1. GraphQL定義を作成 2. GraphQL定義からコードを自動生成(Gradle ✖ Netflixプラグイン) - リクエストとレスポンスのモデルを生成
3. 自動生成したコードを用いて実装 1. GraphiQL と SpectaQL でGraphQL定義を確認 - http://localhost:9001/graphiql?path=/graphql - https://mabubu0203.github.io/catcafe-graph-ql/ 2. Mutation を Postman で実行 - locationCreate - noticeCreate 3. phpmyadmin で登録結果を確認 - http://localhost:8021/ - location - notice 4. kibana で登録結果を確認 - http://localhost:5601/app/dev_tools#/console - GET location/_search 5. Query を Postman で実行 - locationSearch
感想 満足できている点 - GraphQL定義からプロダクションコードを自動生成できた - 仕様書とコードが完全一致 - 実装が簡単にできた - Spring
for GraphQLが強力 - エンドポイント掃除に伴い、コード量が減った - クライアント側で欲しいフィールドを指定できる - RestAPIに比べクライアントの都合を意識しなくて良い印象 - クライアント-サーバー間の通信回数を減らせられる確信がある
感想 満足できていない点 - 文字列のlength長などを定義する仕様が存在しない - length長チェックなどを自動生成できない - GraphQL定義から生成できるドキュメントが読み辛い - 相対的にRedoc
, Swagger-UIのほうがヒューマンリーダブルな印象 - N+1問題解決の実装がめんどくさい - 仕組みは存在している、私は諦めた - ページング処理めんどくさそう - これだ!というきまった仕様は GraphQLに存在しない - 実装例は存在している、私は諦めた
感想 課題 - 1リクエスト内でトランザクションを共有できるか - 存在すれば同一アプリケーション内でロールバック処理が楽 - Postmanに定義ファイルをimportしたことない - できるらしい
おまけ 記事書いたよ - Spring_for_GraphQL入門.md