Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Apollo Linkでできること
Search
piglovesyou
February 22, 2019
Technology
180
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
350
Other Decks in Technology
See All in Technology
Deep Data Security 機能解説
oracle4engineer
PRO
3
1k
【dbts2026】AIエージェントの 判断と探索を変える、 データベース エンジニアリング― 既存DBの処理と依存関係から作る、オペレーショナルオントロジー ―
shisyu_gaku
0
230
IoTとは〜? 数字で見るSORACOM UG【SORACOM UG Explorer 2026】
soracom
PRO
0
290
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
1
7.4k
コードレビューをなくして見えたもの
henteko
0
140
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
780
増え続けるプロダクトの品質をどう担保するか。ProductSpecとTypeScriptによる取り組み
joere
3
1k
re:Invent2026 事前勉強会 歴史と愉しみ方10分LT編
toshi_atsumi
0
150
リアクションエンジニア ― 小さなリアクションから、話しかけやすい組織をつくる ―
ryuguyana
1
130
Sizing, Benchmarking and Performance Tuning Apache Flink Clusters
rmetzger
0
130
"AWSはちょっと苦手"でも大丈夫。AWS Blocks で手軽に作る Flutter のバックエンド #FlutterKaigi
tacck
PRO
0
160
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
470
Code Review Best Practice
trishagee
74
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
680
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
520
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
320
Side Projects
sachag
456
43k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
590
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Λ͍ͬͯΕָ͕Ͱ͖ͨྫ