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
GraphQL で変わったこと・変わらなかったこと / graphql changing an...
Search
qsona
June 02, 2020
Technology
5
21k
GraphQL で変わったこと・変わらなかったこと / graphql changing and unchanging
吉祥寺.pm22
https://kichijojipm.connpass.com/event/177459/
qsona
June 02, 2020
Tweet
Share
More Decks by qsona
See All by qsona
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
4
560
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
28
8.8k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
1.1k
いかにして GraphQL を組織に導入するか (新規開発編) / how we introduce GraphQL on scratch development
qsona
6
4.1k
Well-organized Transaction Script - リファクタリングの妥協的手法 -
qsona
4
1.5k
GraphQL と Prisma から考える次のN年を見据えた技術選定 / Architecture decision for the next N years at StudySapuri
qsona
25
15k
最高のマスターデータ管理手法考察 & VSCode Extension を活用した話 / developing masterdata management tool by using vscode extension
qsona
9
6.6k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
qsona
6
5.7k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
16k
Other Decks in Technology
See All in Technology
量子クラウドシステムと運用
oqtopus
0
130
Cosmos World Foundation Model Platform for Physical AI
takmin
0
1k
AWS Network Firewall Proxyを触ってみた
nagisa53
1
260
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
20260204_Midosuji_Tech
takuyay0ne
1
170
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
140
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
1
2.4k
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
250
Claude Code for NOT Programming
kawaguti
PRO
1
130
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
140
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
430
22nd ACRi Webinar - ChipTip Technology Eric-san's slide
nao_sumikawa
0
110
Featured
See All Featured
A better future with KSS
kneath
240
18k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Leo the Paperboy
mayatellez
4
1.4k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Designing for Performance
lara
611
70k
The Pragmatic Product Professional
lauravandoore
37
7.1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
220
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
The Spectacular Lies of Maps
axbom
PRO
1
540
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
450
My Coaching Mixtape
mlcsv
0
55
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Transcript
GraphQL ͰมΘͬͨ͜ͱɾ มΘΒͳ͔ͬͨ͜ͱ 2020-06-02 ٢ࣉ.pm22 @qsona
whoami • @qsona • Web Developer at Quipper Limited •
͖ͪͽʔॳࢀՃ!!! ͏Ε͍͠!!! ٢ࣉԕ͍!!!
ࠓͷ • ͜Ε·ͰԿ͔ GraphQL & Rails Ͱ API ։ൃΛͯ͠ ຊ൪ϦϦʔεͨ͠
• RESTful ࣌ͱʮมΘͬͨ͜ͱɾมΘΒͳ͔ͬͨ͜ͱʯ ʹ͍͍ͭͯͨ͠
લఏ • Web API Internal use Λఆ͢Δ • πʔϧɾΤίγεςϜͷҰ͠ͳ͍
• APIͷઃܭɾ࣮ͷ͚ͩ • ਅͷREST (Hypermedia API) ͷ͠ͳ͍
Web API ͷઃܭख๏ • Usecase ϕʔε • Resource ϕʔε
Usecase-based Web API • ΫϥΠΞϯτͷϢʔεέʔεʹ߹Θͤͯ Web API Λ࡞Δ • Ϣʔεέʔε
≒ ը໘ • • ࣅͨΑ͏ͳAPI͕ཚཱ͍͢͠ • ຖAPI࡞Δͷ͕໘ => ෳͷϢʔεέʔεʹରԠ͢Δ ਆAPI ͕Ͱ͖Δ
Resource-based Web API • ΞϓϦέʔγϣϯͦͷͷͷ༷ʹ߹Θͤͯ Web API Λ࡞Δ • (جຊతʹ
API ఏڙଆͷ߹Ͱ࡞Δ)
Resource-based Web API • : ΫϥΠΞϯτͷϢʔεέʔεʹ߹Θͳ͍͕࣌͋Δ • 1ը໘ͰෳͷAPIϦΫΤετ͕ඞཁʹͳͬͨΓ • ٯʹ1ϦΫΤετதͰෆཁͳϑΟʔϧυؚΊͯऔͬͯ͠·͏͜ͱ͕͋Δ
• (=> ύϑΥʔϚϯεͷѱԽ) • Resource ͕ࡉ͔͘ͳΓ͗ͯ͢ (ςʔϒϧ୯ҐͳͲ) ΫϥΠΞϯτ͔Β͍ʹ͍͘͜ͱ͕͋Δ
Resource • ݸਓతʹɺ Recourse-based API ʹ͓͍ͯ JSONͷ1֊͝ͱͷ෦Λ Resource ͱݺΜͰ͍·͢
RESTful ࣌ͷࢦ
RESTful ࣌ͷࢦ • جຊతʹ Resource ϕʔεΛબ͢Δ • Resource ΛదͳཻͰఏڙ͢Δ •
ςʔϒϧ୯ҐͰͳ͍ • ΞϓϦέʔγϣϯ্ͷυϝΠϯϞσϧΛߟ͠ɺͦΕʹ߹ΘͤΔ • Ͳ͏ͯ͠ඞཁͳΒผ్ Usecase ༻ͷ endpoint Λੜ͢
GraphQL • Schema ͕ Type ͷ άϥϑߏʹͳ͍ͬͯΔ • query Ͱ
field Λࢦఆ͢Δ͜ͱͰɺ άϥϑͷதͷऔಘ͢Δ෦ΛࢦఆͰ͖Δ
GraphQL ࣌ͷࢦ • GraphQL Type ͕ Resource Λද͢ • query
͕ Usecase Λද͢ • Query Type ͷ field ͕ endpoint Ͱ͋Δ • ͭ·ΓɺResource ϕʔεͷAPIͱ Usecase ϕʔεͷAPIͷ ྑ͍ͱ͜ΖΛཱ྆Ͱ͖Δ!
RESTful => GraphQL Ͱ มΘΒͳ͔ͬͨ͜ͱ
มΘΒͳ͔ͬͨ͜ͱ • ΞϓϦέʔγϣϯͷυϝΠϯΛ͖ͪΜͱߟͯ͠ɺ Resource Λదͳཻʹ͢Δ͜ͱ • Fat Controller, Fat Serializer
Λආ͚Δ͜ͱ • Model ෦ͷઃܭख๏
RESTful => GraphQL Ͱ มΘͬͨ͜ͱ
ແ
มΘͬͨ͜ͱ • ઃܭɾ࣮ϨϕϧͰมΘΔ͜ͱ΄ͱΜͲͳ͔ͬͨ • RESTful ͷͱ͖ͱରԠ͢Δ֓೦͕͋Δ • ͱ͍͑ɺසग़ͷ...? • N+1
• HTTP endpoint ͕શͯ POST /graphql ʹͳΔ
N+1 • Query.users Λ resolve • ͦͷ1݅ͣͭʹରͯ͠ User.jobs Λ resolve
N+1 • ಉ͡ RESTful Ͱى͖Δ • GraphQL ʹ͓͍ͯͳͥΫϩʔζΞο ϓ͞ΕΔ?
N+1 • GraphQL ʹ͓͍ͯӈͷΑ͏ʹɺ ΫϥΠΞϯτ͔Β2௨ΓͷऔΓํ͕γϡο ͱͰ͖Δɺͭ·Γศར • ศར͔ͩΒى͖͍ͯΔ͚ͩ • ղܾ๏:
Batch Loader ͱݺΕΔΈ • Ruby: shopify/graphql-batch
HTTP endpoint ͕શͯ POST /graphql ʹͳΔ • Persisted Query ͱݺΕΔΈͰղܾͰ͖Δ
• ࣄલ / ϥϯλΠϜ ʹΫΤϦΛొ͢Δ
ઃܭ/(୯७ͳ)࣮ΑΓ֎ͷ The NEXT of REST - onk.ninja https://blog.onk.ninja/2017/09/21/the_next_of_rest
͜͜ͰҰ۟ ා͘ͳ͍ GraphQL is Better REST