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
mabubu0203
June 26, 2022
Technology
0
95
20220605 GraphQL実装してみた
20220605にGraphQLの話をした時の資料
mabubu0203
June 26, 2022
Tweet
Share
More Decks by mabubu0203
See All by mabubu0203
ペットの迷子を解決(20230929)
mabubu0203
0
400
20221013 (Web)API仕様書を作る理由
mabubu0203
0
490
20210927 転職活動のお話
mabubu0203
0
140
Other Decks in Technology
See All in Technology
白金鉱業Meetup_Vol.18_生成AIはデータサイエンティストを代替するのか?
brainpadpr
4
220
C++26アップデート 2025-03
faithandbrave
0
1.2k
今日からはじめるプラットフォームエンジニアリング
jacopen
8
1.9k
2025-04-24 "Manga AI Understanding & Localization" Furukawa Arata (CyberAgent, Inc)
ornew
2
330
SnowflakeとDatabricks両方でRAGを構築してみた
kameitomohiro
1
570
「経験の点」の位置を意識したキャリア形成 / Career development with an awareness of the “point of experience” position
pauli
4
130
AIにおけるソフトウェアテスト_ver1.00
fumisuke
1
330
Microsoft の SSE の現在地
skmkzyk
0
280
MCPが変えるAIとの協働
knishioka
1
120
PagerDuty×ポストモーテムで築く障害対応文化/Building a culture of incident response with PagerDuty and postmortems
aeonpeople
3
540
Azure Maps Visual in PowerBIで分析しよう
nakasho
0
190
10分で学ぶ、RAGの仕組みと実践
supermarimobros
0
740
Featured
See All Featured
Making Projects Easy
brettharned
116
6.2k
Why Our Code Smells
bkeepers
PRO
336
57k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Thoughts on Productivity
jonyablonski
69
4.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Building Adaptive Systems
keathley
41
2.5k
How to Ace a Technical Interview
jacobian
276
23k
Automating Front-end Workflow
addyosmani
1370
200k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
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