Intro to GraphQL
(click)
Dara Hayes
dara.hayes@redhat.com
@darahayess
@darahayes

Questions
Definition

far out
It's an alternative way to design APIs... that's all
an alternative to REST APIs, really...
GET http://api.com/users/1
{ name: "Alice", age: 30 }
POST http://api.com/users
{ name: "Bob", age: 50 }
{ result: "success!" }
GET http://api.com/users?age=30
[{ name: "Alice", age: 30 }]
GET http://api.com/users/1
{ name: "Alice", age: 30 }
POST http://api.com/users
{ name: "Bob", age: 50 }
{ result: "success!" }
GET http://api.com/users?age=30
[{ name: "Alice", age: 30 }]
A different way to do the same thing.
Instead of many endpoints like this
GET http://api.com/users/1 POST http://api.com/users
We have one endpoint
http://api.com/graphql
{
name: "Dara",
address: "waterford"
}
Example Query
{
user(id: 1) {
id
name
address
}
}
{
"data": {
"user": {
"id": 1,
"name": "Ted",
"address": "Waterford"
}
}
}
Fields are functions
{
user(id: 1) {
id
name
address
friends(limit: 3) {
name
}
}
}
{
"data": {
"user": {
"id": 1,
"name": "Ted",
"address": "Waterford"
"friends": [
{"name": "Bill"},
{"name": "Alice"},
{"name": "Jennifer"}
]
}
}
}
Queries and Mutations
{
user(id: 1) {
id
name
address
}
}
{
addUser(name: "Fred" address: "London") {
id
name
address
}
}
How does this look on the server?
It all starts with the Schema
type User {
id: ID
name: String
address: String
}
type Query {
listUsers: [User]
getUser(id: ID!): User
}
type Mutation {
addUser(name: String! address: String!): User
}
Background
🚀 Created by Facebook in 2012
🎁 Open Sourced in 2015
✅ Available in 13+ languages
✨ Reference implementation in Node.js
Let's try to build something
Requirements
📱 Build a messaging app like Slack
👨👩👧👦 Users
✉️ Messages
📺 Channels (#random, #javascript, #cats)
📝 Users send messages to a channel
⚡️ Users will receive messages in realtime
The Technology
- Node.js
- Apollo Server - a GraphQL Server Framework
- GraphQL Playground
- In Memory Database
Tasks
- Project Setup
- Schema Design
- Implement Resolvers
- Figure out the Realtime thing
let's get started
GraphQL Subscriptions
type Subscription {
messageAdded: Message
}
type Subscription {
messageAddedToChannel(channelId: Int!): Message
}
Clients can subscribe to events over websockets
Pub Sub
S1
S2
Sn
...
LB
demo
Quick Recap
📝 Schema
⚙️ Resolvers
⚡️ Subscriptions
✅ You get exactly what you ask for
✅ Versionless
✅ Schema
❌ Queries can become complex
❌ You need to figure out stuff all over again
🤔 Ecosystem is very JavaScript oriented
One more thing...

done 🍻
Intro to GraphQL in Node
By Dara Hayes
Intro to GraphQL in Node
- 1,347