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
Exploring GraphQL
Search
Marc-Andre Giroux
March 09, 2017
Programming
310
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Exploring GraphQL
Marc-Andre Giroux
March 09, 2017
More Decks by Marc-Andre Giroux
See All by Marc-Andre Giroux
It Depends - Examining GraphQL Myths & Assumptions
xuorig
0
140
So you Want to Distribute your GraphQL Schema?
xuorig
4
880
So you Want to Distribute your GraphQL Schema?
xuorig
0
690
GraphQL Schema Design @ Scale
xuorig
5
2.2k
Continuous Evolution of GraphQL Schemas @ GitHub
xuorig
3
2.2k
GraphQL à Shopify
xuorig
0
290
GraphQL @ Shopify
xuorig
6
1.8k
GraphQL on Rails
xuorig
2
400
From REST to GraphQL
xuorig
9
1.3k
Other Decks in Programming
See All in Programming
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
190
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
410
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.5k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
810
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
13
6.3k
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
14
7.2k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.3k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
190
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
120
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
190
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.4k
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
First, design no harm
axbom
PRO
2
1.2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
250
Become a Pro
speakerdeck
PRO
31
6k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
370
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
350
The agentic SEO stack - context over prompts
schlessera
0
820
30 Presentation Tips
portentint
PRO
1
330
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
470
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
4 Signs Your Business is Dying
shpigford
187
22k
Transcript
Exploring GraphQL Marc-André Giroux @__xuorig__
None
None
None
@__xuorig__ REST APIs are Great.
@__xuorig__ Except when they're not.
@__xuorig__ Multiple round-trips are not ideal.
@__xuorig__ GET /people/1 GET /planet/2 GET /film/3
@__xuorig__ SELECT * FROM /ENDPOINT
@__xuorig__ GET /people/1 { "person": { "name": "luke" } }
@__xuorig__ { "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color":
"blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male", "homeworld": "http://swapi.co/api/ planets/1/", "films": [ "http://swapi.co/api/films/6/", "http://swapi.co/api/films/3/", "http://swapi.co/api/films/2/", "http://swapi.co/api/films/1/", "http://swapi.co/api/films/7/" ],
@__xuorig__ What do clients even use?
@__xuorig__ { "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color":
"blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male", "homeworld": "http://swapi.co/api/ planets/1/", "films": [ "http://swapi.co/api/films/6/", "http://swapi.co/api/films/3/", "http://swapi.co/api/films/2/", "http://swapi.co/api/films/1/", "http://swapi.co/api/films/7/" ],
GraphQL
@__xuorig__ A special type of database.
@__xuorig__ A library.
@__xuorig__ A Query Langage.
@__xuorig__ &
@__xuorig__ A Spec for servers to execute GraphQL Queries.
@__xuorig__ A GraphQL Hello World.
@__xuorig__ query { film { title } }
@__xuorig__ Anatomy of a GraphQL Query
@__xuorig__ query MyQuery { film { title } }
@__xuorig__ query MyQuery { film { title } } Operation
Type
@__xuorig__ query MyQuery { film { title } } Operation
Name
@__xuorig__ query MyQuery { film { title } } Selection
Set
@__xuorig__ query MyQuery { film { title } } Field
@__xuorig__ • Lexed • Parsed • Validated • Executed
@__xuorig__ "data": { "film": { "title": "A New Hope" }
}
@__xuorig__ query { film(id: "123") { title } }
@__xuorig__ query { film(id: "123") { title characters { name
} } }
@__xuorig__ "data": { "film": { "title": "A New Hope", "characters":
[ { "name": "Luke Skywalker" }, { "name": "Princess Leia" } ] } }
@__xuorig__ The Type System.
@__xuorig__ { film(id: "123") { title characters { name }
} }
@__xuorig__ { film(id: "123") { title characters { name }
} } type QueryRoot { film(id: ID!): Film }
@__xuorig__ { film(id: "123") { title characters { name }
} } type Film { title: String! characters: [Character!]! }
@__xuorig__ { film(id: "123") { title characters { name }
} } type Character { name: String! }
@__xuorig__ Introspection.
@__xuorig__ { __schema { types { name } } }
@__xuorig__ { __type(name: "Film") { name description } }
@__xuorig__ Introspection == Clients with Super Powers
@__xuorig__ • AutoComplete • Client side validation • IDE Integration
• Code Generation
@__xuorig__ GraphiQL
@__xuorig__
@__xuorig__ swapi-graphql-ruby.herokuapp.com
Mutations
@__xuorig__ mutation { addFilm(name: "StarWars 8") { title } }
Fragments
@__xuorig__ query { film(id: "123") { title characters { name
} } bestRatedfilm { title characters { name } } }
@__xuorig__ query { film(id: "123") { title characters { name
} } bestRatedfilm { title characters { name } } }
@__xuorig__ fragment filmFragment on Film { title characters { name
} }
@__xuorig__ query { film(id: "123") { ...filmFragment } bestRatedfilm {
...filmFragment } } fragment filmFragment on Film { title characters { name } }
@__xuorig__ Versioning
@__xuorig__ Versioning Continuous Evolution
@__xuorig__ What about Security ?
@__xuorig__ • Maximum Depth • Query Complexity • Timeout
@__xuorig__ My HTTP Caching :( !
@__xuorig__ • Client Side Cache • Persisted Queries
@__xuorig__ GraphQL is Great.
@__xuorig__ A single roundtrip to fetch exactly what a client
needs.
@__xuorig__ Declarative and predictable. (no more SELECT *)
@__xuorig__ Servers express possibilities.
@__xuorig__ Clients define requirements.
@__xuorig__ That's real separation of concerns!
@__xuorig__ Great developer experience.
@__xuorig__ It makes us ship faster.
@__xuorig__ An everyone is happy.
Thank you! Marc-André Giroux @__xuorig__