GraphQL is a spec that describes:

A Query Language

A Schema Definition Language

GraphQL Scalar Types

Int

Float

String

Boolean

ID

id: ID!

name: String!

GraphQL Scalar Types

type Photo {

      id: ID!

      name: String!

      url: String!

      description: String

      rating: Float

      private: Boolean!

}

GraphQL Object Types

name: String!

Nullable vs. Non-nullable

description: String

  type Query {

      totalUsers: Int!

  }

 

Root Queries

type User {

   postedPhotos: [Photo!]!

}

 

Lists

photos: [Photo]

Nullable vs. Non-nullable Lists

photos: [Photo]!

photos: [Photo!]!

Nullable list of nullable values

Non-nullable list of nullable values

Non-nullable list of non-nullable values

Enums

 enum PhotoCategory {

      PORTRAIT

      ACTION

      LANDSCAPE

  }


One-to-One Connection

  type Photo {

      postedBy: User!

  }

 

One-to-Many Connection

type User {

   postedPhotos: [Photo!]!

}

 

Many-to-Many Connection

type Student {

      schedule: [Course!]!

}

type Course {

      students: [Student!]!

}

City to City

type City {

     name: String!

     connections: [City!]!

}

 

BOISE

SUN VALLEY

BEND

155 MILES

318 MILES

Through Types

type City {

     name: String!

     connections: [Connection!]!

}

 

type Connection {

     distance: Int!

     to: City!

}

BOISE

SUN VALLEY

155 MILES

BEND

318 MILES

Root Mutation

type Mutation {

    postPhoto: Boolean!

}

 

Arguments

type Mutation {

      postPhoto (name: String!): Photo!

 }

 

Input Types

input PostPhotoInput {

    name: String!

    category: PhotoCategory=PORTRAIT

    description: String

}

Input Types

 mutation addPhoto ($input: PostPhotoInput!) {

      postPhoto(input: $input) {

         id

         name

         url

  }  

}

{

   "input":  {

     "name": "Desert Sunset",

     "description": "Sunset over Sedona",

     "category": "LANDSCAPE"

   }

}

Query Variables

Root Subscription

type Subscription {

  newPhoto: Photo!

}

 

Custom Scalars

scalar DateTime

 

type Photo {

     created: DateTime!

     updated: DateTime!

}

Made with Slides.com