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
81
20220605 GraphQL実装してみた
20220605にGraphQLの話をした時の資料
mabubu0203
June 26, 2022
Tweet
Share
More Decks by mabubu0203
See All by mabubu0203
ペットの迷子を解決(20230929)
mabubu0203
0
370
20221013 (Web)API仕様書を作る理由
mabubu0203
0
430
20210927 転職活動のお話
mabubu0203
0
140
Other Decks in Technology
See All in Technology
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
41
18k
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
250
Yahoo! ズバトクにおけるフロントエンド開発
lycorptech_jp
PRO
0
110
「完全に理解したTalk」完全に理解した
segavvy
1
210
UI State設計とテスト方針
rmakiyama
4
890
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
120
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
520
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
330
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
230
クレカ・銀行連携機能における “状態”との向き合い方 / SmartBank Engineer LT Event
smartbank
2
110
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
250
AWS re:Invent 2024 recap
hkoketsu
0
480
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
920
Mobile First: as difficult as doing things right
swwweet
222
9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Rails Girls Zürich Keynote
gr2m
94
13k
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