GraphQL で変わったこと・変わらなかったこと / graphql changing and unchanging
by
qsona
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
GraphQL ͰมΘͬͨ͜ͱɾ มΘΒͳ͔ͬͨ͜ͱ 2020-06-02 ٢ࣉ.pm22 @qsona
Slide 2
Slide 2 text
whoami • @qsona • Web Developer at Quipper Limited • ͖ͪͽʔॳࢀՃ!!! ͏Ε͍͠!!! ٢ࣉԕ͍!!!
Slide 3
Slide 3 text
ࠓͷ • ͜Ε·ͰԿ͔ GraphQL & Rails Ͱ API ։ൃΛͯ͠ ຊ൪ϦϦʔεͨ͠ • RESTful ࣌ͱʮมΘͬͨ͜ͱɾมΘΒͳ͔ͬͨ͜ͱʯ ʹ͍͍ͭͯͨ͠
Slide 4
Slide 4 text
લఏ • Web API Internal use Λఆ͢Δ • πʔϧɾΤίγεςϜͷҰ͠ͳ͍ • APIͷઃܭɾ࣮ͷ͚ͩ • ਅͷREST (Hypermedia API) ͷ͠ͳ͍
Slide 5
Slide 5 text
Web API ͷઃܭख๏ • Usecase ϕʔε • Resource ϕʔε
Slide 6
Slide 6 text
Usecase-based Web API • ΫϥΠΞϯτͷϢʔεέʔεʹ߹Θͤͯ Web API Λ࡞Δ • Ϣʔεέʔε ≒ ը໘ • • ࣅͨΑ͏ͳAPI͕ཚཱ͍͢͠ • ຖAPI࡞Δͷ͕໘ => ෳͷϢʔεέʔεʹରԠ͢Δ ਆAPI ͕Ͱ͖Δ
Slide 7
Slide 7 text
Resource-based Web API • ΞϓϦέʔγϣϯͦͷͷͷ༷ʹ߹Θͤͯ Web API Λ࡞Δ • (جຊతʹ API ఏڙଆͷ߹Ͱ࡞Δ)
Slide 8
Slide 8 text
Resource-based Web API • : ΫϥΠΞϯτͷϢʔεέʔεʹ߹Θͳ͍͕࣌͋Δ • 1ը໘ͰෳͷAPIϦΫΤετ͕ඞཁʹͳͬͨΓ • ٯʹ1ϦΫΤετதͰෆཁͳϑΟʔϧυؚΊͯऔͬͯ͠·͏͜ͱ͕͋Δ • (=> ύϑΥʔϚϯεͷѱԽ) • Resource ͕ࡉ͔͘ͳΓ͗ͯ͢ (ςʔϒϧ୯ҐͳͲ) ΫϥΠΞϯτ͔Β͍ʹ͍͘͜ͱ͕͋Δ
Slide 9
Slide 9 text
Resource • ݸਓతʹɺ Recourse-based API ʹ͓͍ͯ JSONͷ1֊͝ͱͷ෦Λ Resource ͱݺΜͰ͍·͢
Slide 10
Slide 10 text
RESTful ࣌ͷࢦ
Slide 11
Slide 11 text
RESTful ࣌ͷࢦ • جຊతʹ Resource ϕʔεΛબ͢Δ • Resource ΛదͳཻͰఏڙ͢Δ • ςʔϒϧ୯ҐͰͳ͍ • ΞϓϦέʔγϣϯ্ͷυϝΠϯϞσϧΛߟ͠ɺͦΕʹ߹ΘͤΔ • Ͳ͏ͯ͠ඞཁͳΒผ్ Usecase ༻ͷ endpoint Λੜ͢
Slide 12
Slide 12 text
GraphQL • Schema ͕ Type ͷ άϥϑߏʹͳ͍ͬͯΔ • query Ͱ field Λࢦఆ͢Δ͜ͱͰɺ άϥϑͷதͷऔಘ͢Δ෦ΛࢦఆͰ͖Δ
Slide 13
Slide 13 text
GraphQL ࣌ͷࢦ • GraphQL Type ͕ Resource Λද͢ • query ͕ Usecase Λද͢ • Query Type ͷ field ͕ endpoint Ͱ͋Δ • ͭ·ΓɺResource ϕʔεͷAPIͱ Usecase ϕʔεͷAPIͷ ྑ͍ͱ͜ΖΛཱ྆Ͱ͖Δ!
Slide 14
Slide 14 text
RESTful => GraphQL Ͱ มΘΒͳ͔ͬͨ͜ͱ
Slide 15
Slide 15 text
มΘΒͳ͔ͬͨ͜ͱ • ΞϓϦέʔγϣϯͷυϝΠϯΛ͖ͪΜͱߟͯ͠ɺ Resource Λదͳཻʹ͢Δ͜ͱ • Fat Controller, Fat Serializer Λආ͚Δ͜ͱ • Model ෦ͷઃܭख๏
Slide 16
Slide 16 text
RESTful => GraphQL Ͱ มΘͬͨ͜ͱ
Slide 17
Slide 17 text
ແ
Slide 18
Slide 18 text
มΘͬͨ͜ͱ • ઃܭɾ࣮ϨϕϧͰมΘΔ͜ͱ΄ͱΜͲͳ͔ͬͨ • RESTful ͷͱ͖ͱରԠ͢Δ֓೦͕͋Δ • ͱ͍͑ɺසग़ͷ...? • N+1 • HTTP endpoint ͕શͯ POST /graphql ʹͳΔ
Slide 19
Slide 19 text
N+1 • Query.users Λ resolve • ͦͷ1݅ͣͭʹରͯ͠ User.jobs Λ resolve
Slide 20
Slide 20 text
N+1 • ಉ͡ RESTful Ͱى͖Δ • GraphQL ʹ͓͍ͯͳͥΫϩʔζΞο ϓ͞ΕΔ?
Slide 21
Slide 21 text
N+1 • GraphQL ʹ͓͍ͯӈͷΑ͏ʹɺ ΫϥΠΞϯτ͔Β2௨ΓͷऔΓํ͕γϡο ͱͰ͖Δɺͭ·Γศར • ศར͔ͩΒى͖͍ͯΔ͚ͩ • ղܾ๏: Batch Loader ͱݺΕΔΈ • Ruby: shopify/graphql-batch
Slide 22
Slide 22 text
HTTP endpoint ͕શͯ POST /graphql ʹͳΔ • Persisted Query ͱݺΕΔΈͰղܾͰ͖Δ • ࣄલ / ϥϯλΠϜ ʹΫΤϦΛొ͢Δ
Slide 23
Slide 23 text
ઃܭ/(୯७ͳ)࣮ΑΓ֎ͷ The NEXT of REST - onk.ninja https://blog.onk.ninja/2017/09/21/the_next_of_rest
Slide 24
Slide 24 text
͜͜ͰҰ۟ ා͘ͳ͍ GraphQL is Better REST