GraphQL Quick Dev Reference

This quick reference cheat sheet provides a brief overview of GraphQL.

Getting Started

Overview

An alternative approach to RESTful APIs GraphQL is a query language for APIs Easily describe the shape of the GraphQL API using clear shared terms. Clients issue queries/mutations to read and update data GraphQL syntax can express complex entity relations Libraries to implement GraphQL in different languages

GraphQL

Schema

schema β€” GraphQL schema definition

query β€” Read and traverse data

mutation β€” Modify data or trigger an action

subscription β€” Run a query when an event occurs

Built-in Scalar Types

Int β€” Signed 32‐bit integer

Float β€” Signed double-precision floating-point value

String β€” UTF‐8 character sequence

Boolean β€” true or false

ID β€” A Unique identifier

Type Definitions

scalar β€” Scalar Type

type β€” Object Type

interface β€” Interface Type

union β€” Union Type

enum β€” Enum Type

input β€” Input Object Type

Type Modifiers

String β€” Nullable String

String! β€” Non-null String

[String] β€” List of nullable Strings

[String]! β€” Non-null list of nullable Strings

[String!]! β€” Non-null list of non-null Strings

Input Arguments

type Query {
    users(limit: Int): [User]
}

type Query {
    users(limit: Int = 10): [User]
}

type Query {
    users(limit: Int, sort: String): [User]
}

type Query {
    users(limit: Int = 10, sort: String): [User]
}
type Query {
    users(limit: Int, sort: String = "asc"): [User]
}
type Query {
    users(limit: Int = 10, sort: String = "asc"): [User]
}

Input Types

input ListUsersInput {
    limit: Int
    since_id: ID
}
type Mutation {
    users(params: ListUsersInput): [User]!
}

Custom Scalars

scalar Url
type User {
    name: String
    homepage: Url
}

Interfaces

interface Foo {
    is_foo: Boolean
}
interface Goo {
    is_goo: Boolean
}
type Bar implements Foo {
    is_foo: Boolean
    is_bar: Boolean
}
type Baz implements Foo, Goo {
    is_foo: Boolean
    is_goo: Boolean
    is_baz: Boolean
}

Object implementing one or more Interfaces

Unions

type Foo {
    name: String
}
type Bar {
    is_bar: String
}
union SingleUnion = Foo
union MultipleUnion = Foo | Bar
type Root {
    single: SingleUnion
    multiple: MultipleUnion
}

Union of one or more Objects

Enums

enum USER_STATE {
    NOT_FOUND
    ACTIVE
    INACTIVE
    SUSPENDED
}
type Root {
    stateForUser(userID: ID!): USER_STATE!
    users(state: USER_STATE, limit: Int = 10): [User]
}