A good day starts with a good mindset!


Firstly let’s talk why and Benefits of GraphQL Some of them are:

a. No Over-fetching and Under-fetching of Data — Subscribe for what you want

b. Reduces Network Latency

c. Supports Dynamic API Responses

d. Single Endpoint

e. Reducing the concept of Versioning the APIs

f. No more Strict Handshake between developers — De Coupling

Taste of source code


Operation type

query is one operation, alternatively options are mutation and subscription


This type will translated to RESTFul GET


This type will translated to RESTFul POST, PUT, PATCH or DELETE


This type will translated to a realtime connection via WebSockets

Operation “endpoint”

user is for one endpoint

Requested fields

game and age are fields expected to returning.

Technical details


Please be advised GraphQL only support POST even for some get operations.


/graphql is the built-in interface

This will auto discover following modules

. Type definition . Query Definition . Mutation definition . Subscription definition

All of above modules will routed to Resolvers and your server side logic

One real world example

schema file

Firstly create one graphql schema file books.graphql

schema {
    query: Query

type Book {
    isin: String
    title: String
    publisher: String
    authors: [String]
    publishDate: String

type Query{
    allBooks: [Books]
    book(id: String): Book

Here are Java code

//Get the schema source
        final val resourceFile = resource.getFile();
        // parse the schema
        TypeDefinitionRegistry typeDefinitionRegistry= new SchemaParser().parse(resourceFile);
        RuntimeWiring wiring= buildRuntimeWiring();
        final val qlSchema = new SchemaGenerator().makeExecutableSchema(typeDefinitionRegistry, wiring);
        final val graphQL = GraphQL.newGraphQL(qlSchema).build();
        log.info("build graphQL on resource config:{}", resourceFile);
  1. Load resource via import org.springframework.core.io.Resource;
  2. Build a TypeDefinitionRegistry to bind you defined type , e.g. Book
  3. RuntimeWiring is used to wire type and query in GraphQL
  4. SchemaGenerator().makeExecutableSchema will make the schema executable so that we can use it in our code.
  5. To boot strap a new GraphQL via GraphQL.newGraphQL(qlSchema).build