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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mabubu0203
June 26, 2022
Technology
130
0
Share
20220605 GraphQL実装してみた
20220605にGraphQLの話をした時の資料
mabubu0203
June 26, 2022
More Decks by mabubu0203
See All by mabubu0203
バイブコーディングの紹介
mabubu0203
0
62
ペットの迷子を解決(20230929)
mabubu0203
0
460
20221013 (Web)API仕様書を作る理由
mabubu0203
0
640
20210927 転職活動のお話
mabubu0203
0
180
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.5k
サイボウズ、プラットフォームエンジニアリング始めるってよ ― プラットフォームチームの事業貢献と組織アラインメントの強化
ueokande
0
120
PdM・Eng・QAで進めるAI駆動開発の現在地/aidd-with-pdm-eng-qa
shota_kusaba
0
260
Directions Asia 2026 | Beyond Buildable AI Agents: Let’s Visualize Partner Value in the AI Era
ryoheig0405
0
130
実践 TanStack Start ― 新規プロダクトを開発して確立した、サーバーとクライアント境界の設計パターン / Practical TanStack Start Server-Client Boundary Patterns
kaminashi
2
160
サプライチェーン攻撃への備えについて考えている #湘なんか
stefafafan
2
2k
エムスリーテクノロジーズ株式会社 エンジニア向け紹介資料 / M3 Technologies Company Deck
m3_engineering
0
200
[みん強]AIの価値を最大化するデータ基盤戦略:Self-Service型Data Meshへの転換とAgentic AI Meshに向けた取り組み with Snowflake他
y_matsubara
1
160
そのSLO 99.9%、本当に必要ですか? 〜優先度付きSLOによる責任共有の設計思想〜 / Is that 99.9% SLO really necessary? Design philosophy of shared responsibility through prioritized SLOs
vtryo
0
880
Purview Endpoint DLP 動かしてみた
kozakigh
1
460
ワールドカフェ再び、そしてゴール・ルール・ロール・ツール / World Café Revisited, and the Goals-Rules-Roles-Tools
ks91
PRO
0
190
CARTA HOLDINGS エンジニア向け 採用ピッチ資料 / CARTA-GUIDE-for-Engineers
carta_engineering
0
47k
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
400
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
140
First, design no harm
axbom
PRO
2
1.2k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Paper Plane
katiecoart
PRO
1
50k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
460
We Have a Design System, Now What?
morganepeng
55
8.1k
Building Applications with DynamoDB
mza
96
7k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
140
Prompt Engineering for Job Search
mfonobong
0
310
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Ruling the World: When Life Gets Gamed
codingconduct
0
230
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