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
110
20220605 GraphQL実装してみた
20220605にGraphQLの話をした時の資料
mabubu0203
June 26, 2022
Tweet
Share
More Decks by mabubu0203
See All by mabubu0203
バイブコーディングの紹介
mabubu0203
0
20
ペットの迷子を解決(20230929)
mabubu0203
0
430
20221013 (Web)API仕様書を作る理由
mabubu0203
0
550
20210927 転職活動のお話
mabubu0203
0
160
Other Decks in Technology
See All in Technology
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
190
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
210
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1.1k
株式会社ログラス - 会社説明資料【エンジニア】/ Loglass Engineer
loglass2019
4
65k
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
260
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
450
KotlinConf 2025_イベントレポート
sony
1
140
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
2
260
研究開発と製品開発、両利きのロボティクス
youtalk
1
530
データ分析エージェント Socrates の育て方
na0
5
770
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
10k
Rustから学ぶ 非同期処理の仕組み
skanehira
1
150
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Typedesign – Prime Four
hannesfritz
42
2.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Rails Girls Zürich Keynote
gr2m
95
14k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Six Lessons from altMBA
skipperchong
28
4k
Navigating Team Friction
lara
189
15k
Docker and Python
trallard
46
3.6k
How to Ace a Technical Interview
jacobian
279
23k
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