GraphQL Type System
GraphQL is a strongly typed language. A programming language is known as a strongly typed programming language if each type of data such as integer, character, hexadecimal, packed decimal, etc. is predefined in that language and all constants or variables defined for a program is described with one of the data types.
The GraphQL Type system is used to describe the potential of a GraphQL server. It is used to determine if a query is valid or not. It defines various data types that we can use in a GraphQL application to check the input types of query variables at run time and check their validity.
There are mainly five kinds of named type definitions in GraphQL:
Scalar types represent primitive data types in a GraphQL type system. The responses of GraphQL make a hierarchical tree form, and the leaves on these trees are GraphQL scalars. The scalar types can store only a single value.
GraphQL provides the following default scalar types:
Int - The Int scalar type is used to represent a signed 32-bit numeric non-fractional value.
Float - The Float scalar type is used to represent signed double-precision fractional values as specified by IEEE 754.
String - The String scalar type is used to represent textual data, represented as UTF-8 character sequences. This is mainly used by GraphQL to represent free-form human-readable text.
Boolean - The Boolean scalar type is used to represent true or false.
ID - The ID scalar type represents a unique identifier, often used to refetch an object or as the key for a cache.
Following is the syntax to define a scalar type:
The responses of GraphQL make a hierarchical tree form where the leaves on these trees are GraphQL scalars, and intermediate levels are specified as Objects. It shows the kind of objects that you can fetch.
This is the most common type used in a schema and used to represent a group of fields. It allows nested types where each field inside an object type maps to another type. So, you can say that an object type is made of multiple scalar types or object types.
Following is the syntax to define an object type:
The above example specifies an object data-type Employee. The emp_details field in the root Query schema will return a list of Employee objects.
The Query type is a simple request sent from the client to the GraphQL server. It is used to retrieve data from the GraphQL server. It specifies an entry point type to other specific types. It is one of the root-level types in GraphQL.
Following is the syntax to define a query:
Mutation type is used for data manipulation such as create, update or delete data. It is one of the root-level data-types in GraphQL that specifies the entry points for data-manipulation operations.
Following is the syntax to define a Mutation type:
If you want to add a new Employee to the predefined object type "Employee" then you have to define a mutation type:
The GraphQL Enum types are similar to scalar types and also represent leaf values in a GraphQL type system. Enum types are used where you need the user to pick from a prescribed list of options.
Following is the syntax to define an Enum type:
See how enum types are defined:
The GraphQL list type is a special collection type that is used to specify each item in the List. It is a representation of a specific type array of values. List values are serialized as ordered lists according to their item type. The list type is used with a type modifier  that wraps object types, scalars, and enums.
Following is the syntax to define a list type -
An example of the list type named "todo":
By default, all GraphQL types are nullable and set to null because the null value is a valid response for all of the GraphQL types. GraphQL types can either return a value of the specified type or can have no value.
A field must be defined with an exclamation mark (!) to define a non-nullable type. This exclamation mark is used to specify a field that uses a Non-Null type such as name: String!.
Following is the syntax to define a non-nullable field:
Next TopicGraphQL Resolvers