Demo on GraphQL and Working with GraphQL Descriptors in IS 10.4

GraphQL is a query language designed to build client applications by providing a flexible syntax and system for describing their data requirements and interactions. Using GraphQL service, you can query specific data to the server and get the response in a predictable way.
 
Before reading further, read and understand the basic differences between REST and GraphQL at the link https://blog.pusher.com/rest-versus-graphql/
 
Integration Server 10.4 acts as a GraphQL service provider and supports GraphQL version 9.X.
 
You can use the Service Development perspective in Designer to create GraphQLdescriptors. A GraphQL descriptor is created using a GraphQL schema and you must provide a valid GraphQL schema. Integration Server uses the GraphQL schema to create the GraphQL descriptor.
 
Supported and Unsupported GraphQL Features:
 
Supported:
 
The basic GraphQL concepts: Schema, Operations, Types, Data resolvers, and Type resolvers.
Root operations for the resources: Query and Mutation. Integration Server performs any GET, POST, UPDATE, or DELETE operation using these two operations.
Input and output data types: Scalar type, Object type, Interface type, Union type, Input object type, Enum type.
 
Unsupported:
 
Subscription root operation.
Custom scalar data type.
Directives.
 
 
GraphQL uses Resolvers that provide the instructions for turning a GraphQL operation into data. Resolvers are organized into a one to one mapping to the fields in a GraphQL schema. GraphQL uses two types of Resolvers operation:
 
1> Data resolvers
2> Type resolvers
 
 
Import the attached package as I have created the GraphQL descriptors by the attached sample "student.graphql" Graphql schema and built the implementation logic in the "resolvers" service. To ease the POC, I have included the Eh-Cache to store/retrieve the data and make sure you configure the Cache Manager and Cache as shown in the attached screenshot:
 
 
student.graphql:
 
type Query { 
   greeting:String
   students:[Student]
   studentById(id:ID!):Student 
}
 
type Student {
   id:ID!
   firstName:String
   lastName:String
   collegeId:String
}
 
type Mutation {
   createStudent(id:ID,firstName:String,lastName:String,collegeId:ID):String
}
 
GraphQl Endpoint: 
 
http://localhost:5555/graphql/GraphqlDemo:Student
 
Type the following mutation/query in the editor, download the GraphiQL (A GUI for editing and testing GraphQL queries and mutations) from https://electronjs.org/apps/graphiql or use Postman v7.2 which supports GraphQL.
 
 
 
Mutation1: (To add data)
 
mutation {
   createStudent(id:"id-1",firstName:"Mahesh",lastName:"Sreenivasulu",collegeId:"colid-1")
}
 
Response1:
 
{
  "data": {
    "createStudent": "id-1"
  }
}
 
 
Query1: (Get by Id)
 
{  
  greeting 
  studentById(id:"id-1") {
      id
      firstName
      lastName
     collegeId
   }
}
 
Response1:
 
{
  "data": {
    "greeting": "GraphQL Demo",
    "studentById": {
      "id": "id-1",
      "firstName": "Mahesh",
      "lastName": "Sreenivasulu",
      "collegeId": "colid-1"
    }
  }
}
 
Query2: (Get all)
 
{  
   greeting
   students {
      id
      firstName
      lastName
   } 
}
 
Response2:
 
{
  "data": {
    "greeting": "GraphQL Demo",
    "students": [
      {
        "id": "id-2",
        "firstName": "Rhea",
        "lastName": "Mahesh"
      },
      {
        "id": "id-1",
        "firstName": "Mahesh",
        "lastName": "Sreenivasulu"
      }
    ]
  }
}
 
 
 
Let me know if you have any questions/comments. 
 
For more details refer the product docs at 
 
http://techcommunity.softwareag.com/ecosystem/documentation/webmethods/designer/sdf10-4/10-4_Service_Development_Help.pdf
 
 
 
Cheers,
Mahesh K Sreenivasulu

GraphqlDemoIS104.zip (26.2 KB)

student.graphql (286 Bytes)

image.png