# Schema
A schema defines the capabilities of a GraphQL server. Much like a database schema, it describes the structure and the types your API can return.
# Types
Types are the primary building blocks of a GraphQL schema. They define the capabilities of your API and the kind of data you can get from it.
type User {
  id: ID!
  name: String!
  email: String!
  created_at: String!
  updated_at: String
}
# The Root Types
There can be up to 3 special root types in a GraphQL schema. They define the root fields that a query may have. While they are all Object Types, they differ in functionality.
# Query
Every GraphQL schema must have a Query type which contains the queries your API offers.
Think of queries as REST resources which can take arguments and return a fixed result.
type Query {
  me: User
  users: [User!]!
  userById(id: ID): User
}
# Mutation
In contrast to the Query type, the fields of the Mutation type are
allowed to change data on the server.
type Mutation {
  createUser(name: String!, email: String!, password: String!): User
  updateUser(id: ID, email: String, password: String): User
  deleteUser(id: ID): User
}
# Subscription
Rather than providing a single response, the fields of the Subscription type
return a stream of responses, with real-time updates.
type Subscription {
  newUser: User
}