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
350
Other Decks in Technology
See All in Technology
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
410
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
100
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
310
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
280
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
200
Type-safe IaC for Dart
coborinai
0
180
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
480
20260720_クラウド女子会×PyLadiesTokyoコラボ Amazon Bedrock ハンズオン用資料
yuuka51
1
110
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
520
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
7
2.8k
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
270
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
450
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Color Theory Basics | Prateek | Gurzu
gurzu
0
390
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The SEO Collaboration Effect
kristinabergwall1
1
510
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
660
So, you think you're a good person
axbom
PRO
2
2.1k
Context Engineering - Making Every Token Count
addyosmani
9
1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Balancing Empowerment & Direction
lara
6
1.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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Λ͍ͬͯΕָ͕Ͱ͖ͨྫ