Spring Boot GraphQL Schema Specification
is the set of rules governing Query Request
and Response
. GraphQL
defines all the API
descriptions in schema files
written in Schema Definition Language
sometimes also called SDL Syntex
or SDL Notation
.
Unlike Swagger which is external and can have old documentation, GraphQL has inbuilt latest API schema documentation publication capabilities.
The Spring Boot GraphQL Schema Specification
describes what the API
will serve. SDL
also provides detailed information about interfaces
, unions
, fragments
, reserved names
, comments
, directives
, available operands
, etc.GraphQL schema Specification
can be read from here
Spring Boot GraphQL Schema Specification Principles
GraphQL was designed with some major principles in mind, let's see them.
Evolve
Api
requirements change over time, some fields are added some are removed, and accordingly, GraphQL Schema
also evolves. Rest API
marks contract evolution with versioning
and the client has to keep track of which API Version
needs to be called, whereas GraphQL
supports @deprecated directive
that marks the removal of an attribute from the contract. Learn more about @deprecated directive
Schema-first
The Restful API
design comes either from the return type Object of the API
, Database schema
, Java Domain Classes
, etc. GraphQL
proposes that schema
design should be separated from the code so that only the required data will be included in it. GraphQL Schema are Strongly Typed, it precisely define the type, fields, and data constraints of GraphQL API.
SpringBoot GraphQL
supports the schema-first
approach, the schema is represented by the GraphQLSchema Object
. it can be created by SDL
or programmatically
as well. All schema
files should have .graphqls
or .gqls
extensions and are loaded from the src/main/resources/graphql
directory.
The GraphQL schema
majorly supports eight types of elements which are classified as Named types
and and Wrapping Types
.
Named Types
Each Named Type supports unique elements.
Named Type | Description |
---|---|
Scaler Types that support five built-in primitive types String , Int , Float , Boolean , and ID . |
|
GraphQL provides Object Types to hold and wrap a Type Object |
|
GraphQL provides an Abstract Type Interface , which defines all the fields and is implemented by Concrete Types . |
|
A Union is a combination of multiple values, it describes the list of possible objects , and GraphQL provides a Union Type . |
|
GraphQL Enum is used to describe a list of possible values , it can be used for Mutation or input and Type or output as well. |
|
GraphQL Schema defines Input Objects with Input Type , and Spring Boot Controller marks them with @Argument annotation. |
Wrapping Types
Wrapping Type works as a wrapper for named types.
Named Type | Description |
---|---|
List | GraphQL provides Wrapping Types or List Type to hold and wrap a Named Type . |
NonNull | GraphQL provides a NonNull Type , which makes sure the Input Type will have values. |
Input Types
Input Data Type of the API request
Output Type
Result of the API response