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}`);
});