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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
An Introduction to GraphQL (ReactJS SF Bay Area)
Search
jnwng
April 12, 2018
Technology
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
An Introduction to GraphQL (ReactJS SF Bay Area)
A beginner-level introduction to GraphQL
jnwng
April 12, 2018
More Decks by jnwng
See All by jnwng
Evolving the Graph
jnwng
1
310
Introduction to GraphQL (Reactathon)
jnwng
0
190
Providing Flexibility Through Constraint
jnwng
0
110
Introduction to GraphQL
jnwng
1
590
Going GraphQL First - ReactSF
jnwng
0
220
Going GraphQL First
jnwng
5
760
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
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
240
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
4
2.7k
Code4Lib JAPANカンファレンス2026 開会挨拶 / Code4Lib JAPAN Conference 2026: Opening Remarks
ykiyota
0
260
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
150
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
320
AIで開発は速くなったのに、なぜ現場は楽にならないのか 〜あなたの組織のボトルネックを突き止めるワークショップ〜
jacopen
1
300
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
110
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
350
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
120
20260912_スクラムにジェネラリストは必要か
ryugen04
0
120
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
0
210
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.3k
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
15k
From π to Pie charts
rasagy
0
360
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
A Modern Web Designer's Workflow
chriscoyier
698
190k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
680
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
430
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Code Review Best Practice
trishagee
74
20k
Transcript
An Introduction To GraphQL ReactJS SF Bay Area, 4/12/2018
Jon Wong Frontend Infrastructure, Coursera @jnwng 2
Who is this talk for? ▪ Folks who deal with
complex React applications ▪ Folks who use APIs (like REST) on a day-to-day basis ▪ Folks who want to know more about GraphQL! 3
Runtime ▪ Clients ▪ Servers ▪ Tools What We’re Covering
in GraphQL Language ▪ Schemas ▪ Queries ▪ Operations 4
What is GraphQL? Taken straight from GraphQL.org
Describe your Data 6 type Project { name: String tagline:
String contributors: [User] }
Ask for What You Want 7 query { project(name: "GraphQL")
{ tagline } }
Get Predictable Results 8 query { project(name: "GraphQL") { tagline
} } { "project": { "tagline": "A query language for APIs" } } GraphQL JSON
Schemas Describing possible data
Describe everything that is possible ▪ All possible data results
are described by the server. 10
Describe everything that is possible 11 type Project { name:
String tagline: String contributors: [User] }
Discoverability ▪ Exploring an API is no longer a burden
12
GraphiQL 13
Validation ▪ Every query is validated against the GraphQL schema
▪ No runtime errors for making API calls 14
The GraphQL schema gives us the basis of everything that
is possible when communicating to the server from the client. 15
Queries Reading your data
17 A simple query query { project(name: "GraphQL") { tagline
} } { "project": { "tagline": "A query language for APIs" } }
18 A simple query with a name query AQueryWithAName {
project(name: "GraphQL") { tagline } }
19 A simple query with arguments query ($projectName: String!){ project(name:
$projectName) { tagline } }
20 … which requires variables query ($projectName: String!){ project(name: $projectName)
{ tagline } } { “projectName”: “react” } query variables
query { react: project(name: “react”){ tagline } graphql: project(name: “graphql”)
{ tagline } } 21 A simple query with aliases
22 … which returns what you expect { “react”: {
“tagline”: “A JavaScript library for building user interfaces” }, “graphql”: { “tagline”: “A query language for APIs” } }
Fragments 23 fragment Contributors on Project { name contributors }
Spreading a fragment in a query 24 query { project(name:
"GraphQL") { tagline ...Contributors } } query { project(name: "GraphQL") { tagline name contributors } } These turn out the same!
GraphQL queries allow the client to declare exactly what it
needs, in the form that it needs it in. 25
React && Queries Declarative + Composable
27 A typical React application
28 … broken down into components.
29 This is how we normally get the data fetch(‘/courses/machine-learning’)
fetch(‘/partners/?course=machine-learning’) fetch(‘/instructors/?course=machine-learning’)
30 A complex GraphQL query query CoursePage { course(slug: “machine-learning”)
{ title description partner { name logo } instructor { name title photoUrl } } }
31 A complex GraphQL query query CoursePage { course(slug: “machine-learning”)
{ title description ...Partner ...Instructor } }
32 A complex GraphQL query fragment Partner on Course {
partner { name logo } } fragment Instructor on Course { instructor { name title photoUrl } }
33 ▪ Components can be more portable ▪ Components are
more self-sufficient. Every component can declare its own data requirements
Clients Managing your data
Clients make it easier to manage data Relay Apollo 35
Caching ▪ Clients provide advanced caching for GraphQL queries. 36
Caching 37 query ListView { allBooks { id name }
} query DetailView ($id: ID) { bookById(id: $id) { name } }
The GraphQL HoC 38 const ProjectTitle = ({ data: {
project: { tagline } } }) => <h1>{tagline}</h1>; export default graphql(gql` query { project(name: “graphql”) { tagline } } `)(ProjectTitle);
Clients make adopting GraphQL in your application a breeze. 39
Servers Serving your data
Mapping types to resolvers 41 const typeDefs = ` type
Query { projects: [Project] } type Project { name: String tagline: String contributors: [User] } `; const resolvers = { Query: { projects: () => fetch('https://api.com/project’) }, };
Every field can be resolved separately. 42 const resolvers =
{ Project: { name: () => return ‘graphql’, tagline: () => 'A query language for APIs’, contributors: () => fetch(‘/users/?projectName=graphql’) } };
GraphQL servers are flexible 43 ▪ They can act as
proxies to existing data ▪ They can also become the business logic layer itself
Tools Supercharging your data
GraphiQL 45
`eslint-plugin-graphql` 46 Catch invalid API calls at compile-time
`apollo-codegen` 47 Catch runtime errors at compile-time
GraphQL enables an entire ecosystem of tools to make developers
more effective. 48
▪ GraphQL makes it really simple to query lots of
data, no matter where it is. 49 In Summary
▪ Just like React, GraphQL can break down complexity into
composable, reusable pieces 50 In Summary
▪ GraphQL.org ▪ GraphQL.com ▪ https://launchpad.graphql.com/ new 51 How to
Get Started
THANKS! 52 @jnwng Presentation template by SlidesCarnival