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
Apollo Linkでできること
Search
piglovesyou
February 22, 2019
Technology
170
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Apollo Linkでできること
piglovesyou
February 22, 2019
More Decks by piglovesyou
See All by piglovesyou
GraphQL Directiveを試してみた
piglovesyou
0
340
Other Decks in Technology
See All in Technology
そこにあるから地図ができる~位置を示す"モノ"を愉しむ~ - Interface 2026年6月号GPS特集オフ会 / interface_202606_GPS_offline
sakaik
1
120
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
120
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
280
Comment regagner la souveraineté de vos données tout en étant payé grâce à Nostr !
rlifchitz
0
220
現場のトークンマネジメント
dak2
1
200
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
490
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
620
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
200
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
230
時期が悪い!それでもRaspberry Piを買って遊んで活用するには / 20260627-osc26do-rpi-jikigawarui
akkiesoft
1
900
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.9k
Flow 不死:AI 時代 DevOps 的不變本質
cheng_wei_chen
2
550
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
260
How to Talk to Developers About Accessibility
jct
2
260
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Why Our Code Smells
bkeepers
PRO
340
58k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Test your architecture with Archunit
thirion
1
2.3k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Spectacular Lies of Maps
axbom
PRO
1
820
We Are The Robots
honzajavorek
0
260
Site-Speed That Sticks
csswizardry
13
1.2k
HDC tutorial
michielstock
2
720
Transcript
"QPMMP-JOLͰͰ͖Δ͜ͱ &*5ߴଜ
"QPMMP$MJFOUͱ"QPMMP-JOL "QPMMP-JOLͷجຊతͳಈ͖ ͢Ͱʹ͋Δ"QPMMP-JOL "QPMMP-JOLΛ͍ͬͯΕָ͕Ͱ͖ͨྫ
// Apollo Clientͷྫ client.query({ query: gql` query TodoApp { todos
{ id text completed } } `, }) .then(data => console.log(data)) .catch(error => console.error(error));
"QPMMP$MJFOUͱ"QPMMP-JOL IUUQTXXXBQPMMPHSBQIRMDPNEPDTMJOLPWFSWJFXIUNM͔ΒҾ༻ (SBQI2- $POTVNFS
"QPMMP$MJFOUͱ"QPMMP-JOL "QPMMP$MJFOU(SBQI2-$MJFOUͱͯ͠ͷΠϯλʔϑΣʔεΛ ఏڙʢϦΫΤετͳͲͷػೳͳ͍ʣɻ"QPMMP-JOLʹґଘ "QPMMP-JOLΫΤϦ࣌ͷϛυϧΣΞͱͯ͠ͷதͷػೳΛ ఏڙ ΫΤϦΛ࣮ͬͯࡍԿΛ͢Δ͔ʢϦΫΤετͳͲʣɺϨε ϙϯεΛͲ͏͍ͨ͠ͷ͔ʢΩϟογϡ·ͨผʣɺΤϥʔ ΛͲ͏͢Δ͔ "QPMMP-JOL൚༻తͰ3FMBZͳͲͰ͑ΔΑ͏࡞ΒΕ͍ͯΔ
௨ৗϛυϧΣΞͷྫ ΫΤϦɺϨεϙϯεͷՃ
// Ϩεϙϯεʹରͯ͠Կ͔͢Δྫ const link1 = new ApolloLink((operation, forward) => {
// GraphQLΫΤϦΛͬͯԿ͔͢Δ // ଞͷlinkͰ͏σʔλΛContextʹࡌͤΔ // forward() Ͱ࣍ͷlinkΛݺͿ return forward(operation).map(data => { // Ϩεϙϯεʹରͯ͠Կ͔͢Δ return {...data, additional: 'Ճͷ' }; }); });
// Ճ͑ͯΤϥʔʹରͯ͠Կ͔͢Δྫ const link2 = new ApolloLink((operation, forward) => {
// GraphQLΫΤϦΛͬͯԿ͔͢Δ // ଞͷlinkͰ͏σʔλΛContextʹࡌͤΔ return new Observable(observer => { return forward(operation).subscribe( data => { // Ϩεϙϯεʹରͯ͠Կ͔͢Δ observer.next({...data, additional: 'Ճͷ' }); }, error => { // GraphQLΤϥʔʹରͯ͠Կ͔͢Δ observer.error(error); }, (...args) => { // Finally } ); }); });
5FSNJOBUJOH-JOL ࣍ͷMJOLΛݺͳ͍ɻ αʔόϦΫΤετͳͲͯ͠ϛυϧΣΞνΣʔϯΛંΓฦ͢
IUUQTHJUIVCDPNBQPMMPHSBQIRMBQPMMPMJOLUSFFNBTUFSQBDLBHFTBQPMMPMJOLQVSQPTF ΑΓҾ༻ ંΓฦͯ͠Δ
// apollo-link-http ͷ؆қ࣮ྫ const httpLink = new ApolloLink(operation => {
return new Observable(observer => { const key = operation.toKey(); const query = key.slice(0, key.length - ‘|{}| null'.length); fetch(url, { method: 'POST', headers: { 'content-type': 'application/json', }, body: JSON.stringify({ operationName: operation.operationName, variables: operation.variables, query, }), }) .then(res => res.json()) .then(json => observer.next(json)) .catch(json => observer.error(json)) .finally(() => observer.complete()); }); });
// Apollo LinkνΣʔϯͷྫ const client = new ApolloClient({ link: ApolloLink.from([
link1, link2, httpLink, ]), cache, });
"QPMMP-JOLͷ0CTFSWBCMF3FBDUJWF&YUFOTJPOTΈ͍ͨɻ ࡉ͔͍༷෦Ͱ͍ͬͯΔ[FOPCTFSWBCMFΛΔͱΑͦ͞͏ɻ IUUQTHJUIVCDPN[FOQBSTJOH[FOPCTFSWBCMFPCTFSWBCMFTVCTDSJCFOFYUDBMMCBDL FSSPSDBMMCBDLDPNQMFUFDBMMCBDL
͢Ͱʹ͋Δ"QPMMP-JOL IUUQTXXXBQPMMPHSBQIRMDPNEPDTMJOLMJOLTMJTU IUUQTXXXBQPMMPHSBQIRMDPNEPDTMJOLMJOLT DPNNVOJUZIUNM
"QPMMP-JOLΛ͍ͬͯΕ ָ͕Ͱ͖ͨྫ
3FEVY͕ཁΒͳ͍ BQPMMPMJOLTUBUF ίϯϙʔωϯτ·ͨ͗Ͱ͏ঢ়ଶΛอ࣋ )551ӽ͠ͷσʔλͱಉ͡(SBQI2-ΫΤϦͰ͑Δ خ͠͞ ࠓͩͱ3FBDU)PPLTબࢶʢWʣ
3FTPMWFSͷڞ௨Τϥʔ Λॲཧ BQPMMPMJOLFSSPS ͜ΕΛΒͳ͔͕ͬͨͨΊʹ 3FTPMWFSΛԚ͠·ͬͨ͘͜ͱ͕͋Δ IUUQTHJUEFWMJOFDPSQDPN)35FDI NN@JNQSPWFQVMMpMFT
࿈ଓϦΫΤετΛ੍ BQPMMPMJOLCBUDI ࢼͯ͠Έͨʢಈըʣ ະݕূ͕ͩ*OQVU4DSFFOͰͷ ࿈ଧΫϥογϡ͕ Δ͔͠Εͳ͍
None
None
4FSWJDF8PSLFSΛͬͨ 8FC4PDLFU BQPMMPMJOLXTϝΠϯεϨουͰ84ͱଓ ͍ͭͰ04௨͢ΔͨΊʹ όοΫάϥϯυͰଓ͢Δඞཁ Ϋϩʔϯͯ͠վ͢ΕʢະݕূͰ͢ʣ
#JPHSBQIZ"1*Λ͏ BQPMMPMJOLSFTU BQPMMPMJOLIUUQͰઃఆͨ͠ΤϯυϙΠϯτͱ ผͷॴʹ3&45ϦΫΤετ͕Մೳ 3FTPMWFSͰؤுΔඞཁͳ͍
Ҏ্Ͱ͢ "QPMMP$MJFOUͱ"QPMMP-JOL "QPMMP-JOLͷجຊతͳಈ͖ ͢Ͱʹ͋Δ"QPMMP-JOL "QPMMP-JOLΛ͍ͬͯΕָ͕Ͱ͖ͨྫ