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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
jnwng
November 16, 2017
Technology
1
550
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
290
An Introduction to GraphQL (ReactJS SF Bay Area)
jnwng
0
140
Introduction to GraphQL (Reactathon)
jnwng
0
170
Providing Flexibility Through Constraint
jnwng
0
91
Going GraphQL First - ReactSF
jnwng
0
200
Going GraphQL First
jnwng
5
740
keeping up with javascript
jnwng
3
1k
Presentations 101
jnwng
1
250
SViOS Meetup: HTTP Live Streaming
jnwng
2
410
Other Decks in Technology
See All in Technology
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
110
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.5k
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
120
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
290
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
230
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.3k
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
170
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
560
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
190
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
220
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
230
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
310
Featured
See All Featured
Between Models and Reality
mayunak
1
190
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
A Modern Web Designer's Workflow
chriscoyier
698
190k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
720
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
66
Skip the Path - Find Your Career Trail
mkilby
0
56
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
320
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