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
Introduction to GraphQL
Search
jnwng
November 16, 2017
Technology
1
520
Introduction to GraphQL
Real World React November 17th, 2017
jnwng
November 16, 2017
Tweet
Share
More Decks by jnwng
See All by jnwng
Evolving the Graph
jnwng
1
260
An Introduction to GraphQL (ReactJS SF Bay Area)
jnwng
0
120
Introduction to GraphQL (Reactathon)
jnwng
0
160
Providing Flexibility Through Constraint
jnwng
0
64
Going GraphQL First - ReactSF
jnwng
0
180
Going GraphQL First
jnwng
5
700
keeping up with javascript
jnwng
3
1k
Presentations 101
jnwng
1
220
SViOS Meetup: HTTP Live Streaming
jnwng
2
400
Other Decks in Technology
See All in Technology
いつの間にか入れ替わってる!?新しいAWS Security Hubとは?
cmusudakeisuke
0
160
ClaudeCodeにキレない技術
gtnao
0
560
「クラウドコスト絶対削減」を支える技術—FinOpsを超えた徹底的なクラウドコスト削減の実践論
delta_tech
4
190
事例で学ぶ!B2B SaaSにおけるSREの実践例/SRE for B2B SaaS: A Real-World Case Study
bitkey
1
340
NewSQLや分散データベースを支えるRaftの仕組み - 仕組みを理解して知る得意不得意
hacomono
PRO
3
230
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
3
980
CDKTFについてざっくり理解する!!~CloudFormationからCDKTFへ変換するツールも作ってみた~
masakiokuda
1
200
関数型プログラミングで 「脳がバグる」を乗り越える
manabeai
2
220
AWS CDKの仕組み / how-aws-cdk-works
gotok365
10
890
AIの全社活用を推進するための安全なレールを敷いた話
shoheimitani
2
640
オフィスビルを監視しよう:フィジカル×デジタルにまたがるSLI/SLO設計と運用の難しさ / Monitoring Office Buildings: The Challenge of Physical-Digital SLI/SLO Design & Operation
bitkey
1
350
ポストコロナ時代の SaaS におけるコスト削減の意義
izzii
1
260
Featured
See All Featured
For a Future-Friendly Web
brad_frost
179
9.8k
KATA
mclloyd
30
14k
Bash Introduction
62gerente
613
210k
How to Ace a Technical Interview
jacobian
278
23k
Visualization
eitanlees
146
16k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
970
BBQ
matthewcrist
89
9.7k
Adopting Sorbet at Scale
ufuk
77
9.5k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Transcript
An Introduction To GraphQL Real World React, November 16, 2017
Jon Wong Frontend Infrastructure, Coursera @jnwng 2
Runtime ▪ Clients ▪ Servers ▪ Tools What We’re Covering
in GraphQL Language ▪ Schemas ▪ Queries ▪ Mutations 3
What is GraphQL? Taken straight from GraphQL.org
Describe your Data type Project { name: String tagline: String
contributors: [User] } 5
Ask for What You Want { project(name: "GraphQL") { tagline
} } 6
Get Predictable Results { project(name: "GraphQL") { tagline } }
7 { "project": { "tagline": "A query language for APIs" } }
A single endpoint for data from anywhere { book {
author { tweets amazonReviews } } } 8
Schemas Describing possible data
Describe everything that is possible ▪ All possible data results
are described by the server. 10
Validation ▪ Every query is validated against the GraphQL schema
▪ No runtime errors for query documents 11
Execution ▪ Query execution utilizes the schema to figure out
what to run, mapping them to “resolvers” 12
The GraphQL Schema gives us the basis of everything that
is possible when communicating to the server from the client. 13
Queries Reading your data
query { someField } { “data”: { “someField”: “someValue” }}
15 A simple query
query MyQueryName { fieldName } 16 A simple query with
a name
query ($someArg: String) { fieldWithArg(name: $someArg) } 17 A simple
query with arguments
query ($someArg: String) { fieldWithArg(name: $someArg) } + { “someArg”:
“my-field-name” } 18 … which requires variables
query { smallPicture: picture(size: 100) mediumPicture: picture(size: 500) largePicture: picture(size:
2000) } 19 A simple query with aliases
Fragments fragment MyFancyFragment on MyResource { someField } 20 These
are required!
Spreading a fragment in a query query { someResource {
...MyFancyFragment } } 21 These two types should match
22 A typical React application
23 … broken down into components ...
24 A complex query
25 A complex query
26 A complex query query CoursePage { course(slug: “Machine Learning”)
{ title description ...University ...Instructor } }
27 <h1>{course.title}</h1> <p>{course.description}</p> <University university={course.university} /> <Instructor instructor={course.instructor} /> Breaking
queries down with fragments query CoursePage { course(slug: “Machine Learning”) { title description ...University ...Instructor } }
28 ▪ Components can be more portable ▪ Components are
more self-sufficient. Every component can declare its own data requirements
GraphQL queries allow the client to declare exactly what it
needs, in the form that it needs it in. 29
Mutations Writing your data
mutation { addToCounter { count } } 31 A simple
mutation { “data”: { “addToCounter”: { “count”: 1 } } }
mutation { addToCounter { count } } 32 A simple
mutation This is a query
mutation { addToCounter { count } second: addToCounter { count
} } 33 Mutations execute serially { “data”: { “addToCounter”: { “count”: 1 }, “second”: { “count”: 2 } } }
Clients Managing your data
Clients make it easier to manage data Relay Apollo 35
Caching ▪ Clients provide advanced caching for GraphQL queries. 36
Caching query ListView { allBooks { id name } }
37 query DetailView ($id: ID) { bookById(id: $id) { name } }
The GraphQL HoC const Component = ({ data: { someField
}}) => <span>{someField}</span> export default graphql(gql` query { someField } `)(Component) 38
39
40 const Instructor = ({ data: { instructor }}) =>
( <View> <ProfilePhoto profile={instructor.profile} /> <span>{instructor.name}</span> </View> ); export default graphql(gql` query { instructor(id: 1) { name profile { ...ProfilePhoto } } } ${ProfilePhoto.fragment} `)(Instructor)
Clients make adopting GraphQL in your application a breeze. 41
Servers Serving your data
Mapping types to resolvers 43 const schemaDefinition = ` type
Query { books: [Book] } type Book { title: String author: String } `; const resolvers = { Query: { books: () => fetch('https://api.com/books') }, };
Every field can be resolved separately. 44 const resolvers =
{ Query: { books: () => fetch('https://api.com/books') }, Book: { reviews: () => return [], title: () => fetch(‘https://api.com/titles’) } };
A single endpoint for data from anywhere { book {
author { tweets amazonReviews } } } 45
GraphQL servers are flexible 46 ▪ They can act as
proxies to existing data ▪ They can also become the business logic layer itself
Tools Supercharging your data
GraphiQL 48
`eslint-plugin-graphql` 49 Catch invalid API calls at compile-time
`apollo-codegen` 50 Catch runtime errors at compile-time
GraphQL enables an entire ecosystem of tools to make developers
more effective. 51
▪ GraphQL makes it really simple to query lots of
data, no matter where it is. 52 In Summary
▪ Just like React, GraphQL can break down complexity into
composable, reusable pieces 53 In Summary
▪ GraphQL.org ▪ GraphQL.com ▪ https://launchpad.graphql.com/ new 54 How to
Get Started
THANKS! 55 @jnwng Presentation template by SlidesCarnival