GraphQL Advanced

GraphQL subscriptions, directives, and advanced features.

Subscriptions

Define subscription
type Subscription {
  userCreated: User
  messageAdded(roomId: ID!): Message
}

Subscribe to events
subscription {
  messageAdded(roomId: "123") {
    id
    text
    user {
      name
    }
  }
}

Directives

@include - conditional inclusion
query($withEmail: Boolean!) {
  user {
    name
    email @include(if: $withEmail)
  }
}

@skip - conditional exclusion
query($skipEmail: Boolean!) {
  user {
    name
    email @skip(if: $skipEmail)
  }
}

@deprecated - mark as deprecated
type User {
  oldField: String @deprecated(reason: "Use newField")
}

Aliases

Query with aliases
query {
  firstUser: user(id: "1") {
    name
  }
  secondUser: user(id: "2") {
    name
  }
}

Response
{
  "firstUser": { "name": "John" },
  "secondUser": { "name": "Jane" }
}

Node.js Apollo Server

const { ApolloServer, gql } = require("apollo-server");

Type definitions
const typeDefs = gql`
  type User {
    id: ID!
    name: String!
  }
  type Query {
    users: [User]
  }
`;

Resolvers
const resolvers = {
  Query: {
    users: () => users
  }
};

const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
  console.log(`Server at ${url}`);
});