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
Introduction to GraphQL
Search
jnwng
November 16, 2017
Technology
590
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to GraphQL
Real World React November 17th, 2017
jnwng
November 16, 2017
More Decks by jnwng
See All by jnwng
Evolving the Graph
jnwng
1
310
An Introduction to GraphQL (ReactJS SF Bay Area)
jnwng
0
160
Introduction to GraphQL (Reactathon)
jnwng
0
190
Providing Flexibility Through Constraint
jnwng
0
110
Going GraphQL First - ReactSF
jnwng
0
220
Going GraphQL First
jnwng
5
770
keeping up with javascript
jnwng
3
1.1k
Presentations 101
jnwng
1
270
SViOS Meetup: HTTP Live Streaming
jnwng
2
420
Other Decks in Technology
See All in Technology
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
310
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
2
170
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
1.1k
トークン化預金DCJPYの取り組みと活用ユースケース
finengine
0
240
Practical ransomware detection on macOS (via maths, not AI)
patrickwardle
0
100
Classmethod Company Deck
satoshi7
1
830
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
220
Claude Code をローカルとサーバー上で利用した際の Bedrock 利用料をユーザー単位で一本化してみる
ohorig
0
120
「私が一番顧客に詳しい」を捨てる~ 全員が一次情報に精通する開発チームをつくり、PMが次のボトルネックへ染み出すまで
kaminashi
3
1.8k
Refining Active Record
shugo
0
200
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
610
僕のハーネスを紹介します
watany
5
1.5k
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
How to Ace a Technical Interview
jacobian
280
24k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Unsuck your backbone
ammeep
672
58k
BBQ
matthewcrist
90
10k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
30 Presentation Tips
portentint
PRO
1
440
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
HDC tutorial
michielstock
2
970
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