Whatever message this page gives is out now! Go check it out!

GraphQL in ColdFusion

Last update:
May 18, 2026
Learn about GraphQL in ColdFusion, how it is different from REST, GraphQL schema, variables and parameters.

What is GraphQL?

GraphQL gives you all the information you need about your API data and allows clients to request exactly what they need.
Some of the benefits of GraphQL API include:
  • Query multiple data sources at once.
  • Retrieve only the data you need.
  • Easily change or add data.

How is GraphQL different from REST?

REST is an architectural style for creating web services, while GraphQL is a query language for APIs.
GraphQL is much more powerful than REST, as it allows you to query specific data and get only the data you need. Unlike REST based APIs, GraphQL allows you to customize your data return, and the query structure mimics the structure of the JSON which returns.

When to use GraphQL?

Under-fetching and over-fetching
When you know your users will have limited bandwidth, you can use GraphQL to request exactly the data you need without making multiple requests.
Optimize data transfer
You can use GraphQL when we have a client-heavy application and need to optimize the data transfer between client and server.
Consumes less bandwidth
GraphQL consumes less bandwidth as it makes a single API call to get precise data. So, you can use it when you want to optimize bandwidth. This can be a boon when dealing with very large, highly verbose applications such as social media, messaging, and SMS based programs.

Core Concepts

A GraphQL request string is called a GraphQL document. For example,
{
  author {
    id
    name
  }
}
You can utilize a GraphQL query by importing it into a page to use as a query, or by writing the query inline inside your code.

GraphQL client methods

GetGraphQLClient

Syntax
getGraphQLClient(parameterStruct)
Description
Use this method to create the GraphQL client that will communicate with the server that contains the schema. Pass the configuration parameters to get the client.
Parameters
ParameterDescriptionRequired
service_urlThe URL of the server, which contains the schema. You can create your own server or use any of the existing ones. For more information, see the following:Yes
service_nameSpecify the name of the server.Yes
client_nameThe name of the GraphQL client that you had configured in the ColdFusion Administrator. For more information on configuring the GraphQL service on the ColdFusion Administrator, see GraphQL options.Yes
raw_http_client(True/False) Attribute to specify whether you must use HTTP Client or Apollo Client internally.No
root_package_nameSpecifies the root of your server. For example, if you have two servers, create both the folders in cfusion/gql/main/src, and then you will refer the folders in your pom.xml. The root folder must be unique for each GraphQL service.  No
headers
A struct containing:
  • keys: The key to authenticate with the server.
  • values: The value to authenticate with the server.
Yes
batching_configuration
Batching is required by the GraphQL Client to reduce the number of network round trips by enabling multiple operations in a single HTTP call.
The param is struct of the following:
  • enabled: (True/False) Whether batching is enabled.
  • batch_interval_ms: The interval (in milliseconds) between each call.
  • max_batch_size: Specify the number of calls to be sent in a batch.
If you want batching, then enabled is required. The rest are optional.
No
subscription_configurationA struct of the following:
  • websocket_url: For subscriptions, the communication is through WebSockets, therefore, specify the URL. The websocket url can be different from the server url.
  • subscription_heartbeat_timeout: Specify the subscription timeout value.
  • subscription_heartbeat_timeunit: Specify the timeout unit.
If you want subscription, then websocket_url is required.
No
Exceptions
ExceptionDescription
ValidationExceptionWhen config is null/incorrect.
ModuleNotAvailableExceptionWhen graphqlclient module is not installed.
For example,
Inline
// Create GQL object 
gqlClient = getGraphQLClient({ 
    service_url : "ENDPOINTURL", 
    "raw_http_client" : true 
}); 
// This variable will hold your GQL query 
Gql = ‘ 
query  
    { 
        Table  
            {  
                Column1  
                Column2 
                Column3 
                Column4 
            } 
        } 
‘ 
// Assign the response from your query to a variable so you can dump it to screen 
response = gqlClient.fetchResponse(gql1, {});
File
gqlClient = getGraphQLClient ({ 
  service_name: "server-name", 
  type = "graphqlclient", 
  "raw_http_client": true, 
  service_url : "endpoint-url", 
  root_folder: "root_folder", 
  headers : { 
      values: "auth-value", 
      keys: "auth-key" 
  }, 
batching_configuration: { 
            enabled: true, 
            batch_interval_ms: 10, 
            max_batch_size: 15 
}, 
subscription_configuration : { 
           websocket_url: "wss://websocket-url", 
            subscription_heartbeat_timeout : 5, 
            subscription_heartbeat_timeunit : "nano" 

})

GenerateGraphQLModels

Syntax
generateGraphQLModels()
Description
This method generates models for all queries, mutations, and subscriptions. Call this method every time if there is a change in the query or you’ve added a new query in the graphql file.
If there are errors, stop ColdFusion, clear the Felix cache (CFHOME\cfusion\bin\felix-cache), and restart ColdFusion.

GraphQL object methods

The GraphQL objects contains the method, fetchResponse. The method retrieves the response of the specified query to the server. 
Syntax 
fetchResponse(query, queryParams)
Parameters 
  • query: The query, subscription, or mutation to be passed to the server.
  • queryParams: The values to pass as query parameters.
Exceptions
  • org.apache.maven.shared.invoker.MavenInvocationException
For example,
paramValues = ${id:[89,109,189,200,205]};
response = gqlclient.fetchResponse("mutation BookTrip($id:[ID]!) {bookTrips(launchIds:$id) {success message}}", paramValues);

GraphQL client methods

The following methods are supported:
MethodParametersReturns
activeCallsCount()NoneNumber of calls made to the query
addOnSubscriptionManagerStateChangeListener
(com.apollographql.apollo.subscription.OnSubscriptionManagerStateChangeListener)
Closure functionNone
disableSubscriptions()NoneNone
downloadSchema(java.lang.String, java.lang.String)Schema of the queryNone
enableSubscriptions()NoneNone
getApplicationInterceptorFactories()NoneList
getApplicationInterceptors()NoneList
getName()NoneName of the query
getSchema(java.lang.String)NoneReturns the GraphQL schema
getServerUrl()NoneThe URL of the GraphQL server
getSubscriptionManager()NoneThe subscription manager
getSubscriptionManagerState()NoneThe state of the subscription manager.
mutation(java.lang.String, java.lang.Object)
  1. Name of the mutation
  2. Struct containing data to add
Mutation object
query(java.lang.String, java.lang.Object)
  1. Schema
  2. Struct of data to a query
Query object
serverOk()NoneStatus of the server, True if server is running, False otherwise
shutDown()NoneNone
startBatchPoller() NonNoneNone
stopBatchPoller()NoneNone
subscribe(java.lang.String, java.lang.Object)
  1. Schema
  2. Struct data for subscription
None

Query/Mutation/Subscription object

You can obtain the object for the operations by creating an object of the function, getGraphQLClient. For example,
// get the graphQL service first 
     gqlClient = getGraphQLClient({ 
      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 
      root_folder: "root", 
  //"raw_http_client": true, 
  headers: { 
              keys: "key", 
              values: "value"           } 

    }); 
    generateGraphQLModels();     
    queryObj = gqlClient.query(schema,values)

Query object methods

The following methods are supported:
MethodParametersReturns
canBeBatched(boolean)booleanReturns the query object.
cancel()NoneNone
clone()NoneReturns the cloned object of the operation.
enqueue(closure)enqueue(), execute() would be available on queryObject methods. They would be called on queryObject.execute() or mutationObject.enqueue(onSuccess, onFailure). There would be two closures, one for success, other for failure in enqueue()None
execute()NoneReturns the results from the query object.
fields()NoneReturns the fields of the query response.
isCanceled()NoneReturns if an operation is canceled (True) or not (False).
marshalVariablesJson()NoneReturns JSON data.
opName()NoneReturns the name of the query, mutation, or subscription operation.
operation()NoneReturns the type of operation.
rawOperation()NoneReturns a string.
toBuilder()NoneReturns ApolloCall.Builder<T> object.
variables()NoneReturns a struct of the variables used in the operation.

Mutation object methods

The following methods are supported:
MethodParametersReturns
canBeBatched(boolean) Note: Mutations are not supported in batching.booleanReturns the query object.
cancel()NoneNone
clone()NoneReturns the cloned object of the operation.
enqueue(closure)Callback to handle any logic of a query operation. For example, OnResponse, OnFailure, OnHTTPError, and so on.  None
execute()NoneReturns the results from the query object.
fields()NoneReturns the fields of the query response.
isCanceled()NoneReturns if an operation is canceled (True) or not (False).
marshalVariablesJson()NoneReturns JSON data.
opName()NoneReturns the name of the query, mutation, or subscription operation.
operation()NoneReturns the type of operation.
rawOperation()NoneReturns a string.
toBuilder()NoneReturns ApolloCall.Builder<T> object.
variables()NoneReturns a struct of the variables used in the operation.

Subscription object methods

The following methods are supported:
MethodParametersReturns
cancel()NoneNone
clone()NoneReturns the cloned object of the operation.
execute(closure,closure,closure)Callback to handle any logic of a query operation. For example, OnResponse, OnFailure, OnHTTPError, and so on.  None
execute(Closure onConnected, Closure onResponse, subscriptionObject.closure onFailure,Closure onCompleted, Closure onTerminated)Callback to handle any logic of a query operation. For example, OnResponse, OnFailure, OnHTTPError, and so on.   
isCanceled()NoneReturns if an operation is canceled (True) or not (False).

Configure GraphQL client

ColdFusion Administrator

Configuring the GraphQL service using the ColdFusion Administrator. For more information, see GraphQL options.
<cfscript>
    adminObj = CreateObject("component","CFIDE.adminapi.administrator");
    adminObj.login("admin","admin")
    
    gqlCFC = CreateObject("component","CFIDE.adminapi.graphql")
    
    http_header = {
        "x-hasura-admin-secret" = "secret"
    }
        gqlCFC.setServiceConfiguration(service_name="hasura",root_package_name="root_hasura",service_url="https://hardy-mink-39.hasura.app/v1/graphql",headers=http_header, schema_path="");
    sc = {
        websocket_url: "wss://hardy-mink-39.hasura.app/v1/graphql",
        subscription_heartbeat_timeout : "1",
        subscription_heartbeat_timeunit : "days"
    }
    bc = {
        enabled: false
    }
    gqlCFC.setClientConfiguration(client_name="hasura_client_http",service_cname="hasura",raw_http_client=true,batching_configuration=bc, subscription_configuration=sc);
    gqlCFC.updateServiceConfiguration(service_name="hasura",raw_http_client=true, root_package_name="updated_root");
    gqlCFC.updateClientConfiguration(client_name="hasura_client_http",raw_http_client=false);
    gqlFC.deleteServiceConfiguration("hasura"); Deleting service will delte clients as well
    gqlFC.deleteClientConfiguration("hasura_client_http");
    
</cfscript>

What is a GraphQL Schema?

GraphQL API endpoints that you will be consuming will have their functionality constrained by a schema. Schemas are JSON descriptions of what is allowable on a GraphQL endpoint.
A schema is a description of an item that can also be referred to as a representation of a query. Any GraphQL server implementation is built around a GraphQL schema. It outlines a GraphQL server's functionalities, such as the range of queries, modifications, subscriptions, and additional types and directives that can be used.
A hierarchy of types with fields filled in from your backend data storage is defined by the schema. Also, it describes the data that clients may access, write, or remove from the server.

Basic concepts of a schema

You write a GraphQL schema GraphQL SDL (schema definition language), also called GraphQL schema language.
A schema defines a collection of types and the relationships between them. There are four basic GraphQL types:
  • Scalar
  • Object- Query, Mutation, and Subscription
  • Input
  • Enum

Write a GraphQL schema

Before writing a schema, have the following ready:
  • Structure and fields
  • Field types and return types
  • Type of operation,query, mutation, or both
Here is an example of how we can use the schema to define a simple type called Person:
type Person {
  name: String!
  age: Int!
}
The schema has two fields, name and age, and has the data types, String and Int respectively.
A Person, in turn, can also be a part of a Post.
type Post {
  title: String!
  author: Person! 
}
For more information, see GraphQL Schema.

GraphQL operations

The following are the types of GraphQL operations:
  • query (a read-only fetch)
  • mutation (a write followed by a fetch)
  • subscription (a request that fetches data in response to events)
Query
A GraphQL query retrieves data from the application server like a REST GET call. GraphQL queries satisfy a range of use cases, including the following:
  • A set of products to be displayed.
  • Display customer data.
  • Shopping cart contents.
Structure of a query
A query contains the following elements:
  • The optional keyword query.
  • An operation name for your local implementation. This name is required if you include variables.
  • The name of the query.
  • The terms to search for.
  • The output object, which specifies which data the query returns.
The following example shows the structure of the cart query:
query myCartQuery{
  cart(cart_id: String!): Cart
}
MyCartQuery in the example above indicates how you implemented the cart query. The string with the non-nullable value cart id identifies the cart to query. The value is not nullable, as shown by the exclamation point. The fields to return are specified by the Cart output object.
The following is the full query:
query myCartQuery{ 
  cart(cart_id: "1WxKm8WUm3uFKXLlHXezew5WREfVRPAn") { 
    items { 
      id 
      quantity 
    } 
    billing_address { 
      firstname 
      lastname 
      postcode 
      } 
    shipping_addresses { 
      firstname 
      lastname 
      postcode 
    } 
  } 
}
The following example shows the query response:

  "data": { 
    "cart": { 
      "items": [ 
        { 
          "id": "7", 
          "quantity": 10 
        } 
      ], 
      "billing_address": { 
        "firstname": "James", 
        "lastname": "Spencer", 
        "postcode": "12345" 
      }, 
      "shipping_addresses": [ 
        { 
          "firstname": "James", 
          "lastname": "Spencer", 
          "postcode": "12345" 
        } 
      ] 
    } 
  } 
}
When defining a query, you can also implement the following:
Async and sync
ColdFusion supports async operations in GraphQL, where you can execute an operation in the client, and run an operation in a concurrent thread. For example,
onSuccess = function(response) { 
writeOutput("Received Response from GraphQL Server"); 
writedump(response.toString()); 

onError = function() { 
writeOutput("Error While Receiving Response from GraphQL Server"); 
}  
queryObj = gqlClient.query("Warriors", {});    
// async call 
queryObj.enqueue(onSuccess, onError);  
// sync call 
writedump(queryObj.execute())
In async versions, for Query and Mutation operations, we’re providing the following callback methods:
  • onSuccess
  • onFailure
If there is a success from the server, the onSuccess callback is invoked. Else, the onFailure callback is invoked.

Variables in GraphQL

Pass a variable as shown in the example below:
query ($limit: Int) { 
  author(limit: $limit) { 
    id 
    name 
  } 


The variable can be set in the following way: 

  limit: 5 
}

Variables in GraphQL

In GraphQL, you can insert, update or delete data with mutations. A mutation is a GraphQL Operation that allows you to modify data on the server-side. You can think of GraphQL mutations like POST, PUT, PATCH, and DELETE requests in REST.
For example,
mutation { 

  addCategory(id: 6, name: "Green Fruits", products: [8, 2, 3]) { 
    name 
    products { 
      name 
    } 
  } 
}

Subscription

Subscriptions are useful for notifying your client in real time about changes to back-end data, such as the creation of a new object or updates to an important field.
For example,
type Subscription { 
  commentAdded(postID: ID!): Comment 


On the client side, 
subscription OnCommentAdded($postID: ID!) { 
    commentAdded(postID: $postID) { 
      id 
      content 
    } 
  }
How subscriptions work
Subscriptions use websockets to set up real-time communication from the server to the client. A subscription listens to websockets when a query creates, reads, updates, or deletes data on the server. The events are pushed from the server to the subscribing clients.
The callback functions supported are:
  • public void execute(Closure onResponse, Closure onFailure, Closure onCompleted);
  • public void execute(Closure onConnected, Closure onResponse, Closure onFailure,Closure onCompleted, Closure onTerminated)
For example,
<cfscript>  

    //Subscription Client Handle Creation 
    subscrClient = getGraphQLClient({ 
            url = <graphql_server_url>, 
                webSocketServerUrl = <websocket_server_url>, 
                wsprotocol = <websocket_protocol>, 
                subscriptionTrasportFactory = <subscription_transport_factory>, 
                headers = <ok_http_client> 
    ... 
    }); 

    subscriptionHandlerCallback = <Callback to Handle the         OnCompleted/OnConnected/OnTerminated/OnResponse/OnFailure Logic for Subscription Operation>  
    subscriptionCall = subscrClient.subscribe(subscriptionObj);  
    subscriptionCall.execute(subscriptionHandlerCallback); 
 </cfscript>

GraphQL in ColdFusion

For this release, install the full version of ColdFusion and the GraphQL package will get installed automatically.
Note:
For naming the Graphql files, the name of the operation provided must match the operation name provided while forming the query object.
Location of the GraphQL files
In this document, the examples use the Apollo server.
If {cfusion.home} is the location of ColdFusion home, then:
  • For service1, all .graphql files need to be placed in {cfusion.home}/src/main/graphql/service1 directory.
  • For service2, all .graphql files need to be placed in {cfusion.home}/src/main/graphql/service2 directory.
Note:
‘myservice’ is a service that is packaged with the graphqlclient package. The xml entry for 'myservice' will also be listed in pom.xml. If you want to create your own service, create a folder in the same directory (/cfusion/gql/src/main/graphql/{new_gql_service_name}), and modify the pom.xml file to add the new service.
Changes in pom.xml
The pom.xml (ColdFusion/cfusion-home/gql) is overwritten with the service endpoint entry added.
<myservice>
    <compilationUnit>
        <name>myservice</name>

        <compilerParams>
            <rootPackageName>root</rootPackageName>
        </compilerParams>
    </compilationUnit>

    <introspection>
        <enabled>true</enabled>

        <endpointUrl
            >https://apollo-fullstack
            tutorial.herokuapp.com/graphql</endpointUrl
        >

        <headers></headers>

        <connectTimeoutSeconds>10</connectTimeoutSeconds>
        <readTimeoutSeconds>10</readTimeoutSeconds>
        <writeTimeoutSeconds>10</writeTimeoutSeconds>
        <useSelfSignedCertificat>false</useSelfSignedCertificat>
        <useGzip>false</useGzip>
        <prettyPrint>false</prettyPrint>
    </introspection>
</myservice>

HTTP Client and Apollo Client

In Apollo Client, you can write the queries and place the queries in the service folder that you’ve created. Then on the cfm file, invoke the method generateGraphQLModels(), and generate the response.
Whereas using a http client, you can write and edit the query directly without compiling the query. A http client does not support subscription. In addition, a http client doesn't perform type checking of parameters at the client side.

Query

A query is used by the client to request the data it needs from the server.
For example,
Calculate the number of launches.
<cfscript> 
    // get the graphQL service first 
     gqlClient = getGraphQLClient({ 
      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 
      root_folder: "root", 
        headers : { 
              keys: "Authorization", 
              values: "value" 
          } 
    }); 
    generateGraphQLModels();     
    queryObj = gqlClient.query("MissionDetails", {});     
    response=queryObj.execute() 
    response.get("Data") 
</cfscript>
Similarly, calculate the number of trips booked,
<cfscript> 
    // get the graphQL service first 
     gqlClient = getGraphQLClient({ 
      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 
      root_folder: "root", 
       headers : { 
              keys: "Authorization", 
              values: "value" 
          } 
    }); 
    generateGraphQLModels(); 
    queryObj = gqlClient.query("TripsBooked", {}); 
    //writedump(queryObj); 
    response=queryObj.execute() 
   // writeDump(response.get("Data")) 
</cfscript>
Output
{totalTripsBooked=9}

Subscription

TripsBookedSub.graphql
subscription TripsBookedSub { 
  tripsBooked 


File.cfm 

<cfscript> 
    gqlClient = getGraphQLClient({ 
      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 
      root_folder: "root", 
        headers : { 
              keys: "Authorization", 
              values: "value" 
          } 
    }); 

    generateGraphQLModels();  
    queryObj=gqlClient.subscribe("TripsBookedSub",{}) 
    // writeDump(queryObj)     
</cfscript>

Mutation

Mutations return a fetch THAT you can specify. You cannot mutate without a return.
Add a user login.
Login.graphql
mutation Login($email: String) { 
  login(email: $email) { 
    token 
  } 
}
mutation.cfm
<cfscript> 

    gqlClient = getGraphQLClient({ 
      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 
      root_folder: "root", 
      //"raw_http_client": true, 
      headers : { 
              keys: "key", 
              values: "value" 
          } 
    }); 
    generateGraphQLModels(); 
    queryObj = gqlClient.mutation("Login", { 
                            "email": "user1@example.com" 
    }); 

    // writedump(queryObj)   
    response=queryObj.execute() 
    // writeDump(response.get("Data")) 
</cfscript>
Output
{
login=Login{
__typename=User, token=<token>
}
}

Fragment

A fragment is a reusable query component is a GraphQL fragment. You could encounter circumstances in GraphQL when you need to use different queries to look for the same fields. If your query contains numerous repeating fields spread across several different locations, you can combine them into a single, reusable unit known as a fragment.
The following is a declaration of a EmpName fragment that can be used with any Employee object:
fragment EmpName on Employee { 
  firstName 
  lastName 
}
For example,
LaunchDetailsFragment.cfm
fragment launchFragment on Launch { 
  id 
  site 
  mission { 
    name 
  } 

query LaunchDetailsFragment($id:ID!) { 
  launch(id: $id) { 
    # Usage of named fragment 
    ...launchFragment 
  } 
}
fragments.cfm
<cfscript> 
    gqlClient = getGraphQLClient({ 
      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 
      root_folder: "root", 
      headers : { 
              keys: "key", 
              values: "value" 
          } 
    }); 
    generateGraphQLModels();  
    queryObj = gqlClient.query("LaunchDetailsFragment", {"id": "50"}); 
    // writedump(queryObj) 
    response=queryObj.execute() 
    // writeDump(response.get("Data")) 
</cfscript>
Output
{launch=Launch{__typename=Launch, fragments=Fragments{launchFragment=LaunchFragment{__typename=Launch, id=50, site=KSC LC 39A, mission=Mission{__typename=Mission, name=KoreaSat 5A}}}}}

Inline parameters

The ColdFusion implementation of GraphQL allows you to pass in queries and parameters inline directly in your CFML code. This can help with readability when debugging, as well as make it easier to pass in variables from the CF scope into your query parameters.
For example,
<cfscript> 
    // get the graphQL service first 
    gqlClient = getGraphQLClient({ 
   service_Url : " https://apollo-fullstack-tutorial.herokuapp.com/graphql ", 
    "raw_http_client": true, 
    headers : { 
        keys: "key", 
     values: "value" 
    } 
    }); 
    paramValues = ${launchId: 1}; // define the values to be passed in the query 
    response = gqlclient.fetchResponse(" 
    query TripsBooked($launchId: ID!) { 
    launch(id: $launchId) { 
        id 
        isBooked 
        mission { 
          name 
    } 
  } 
}  
",paramValues); 
    writeOutput(response.get("Data")) 
</cfscript>
Output
{"data":{"launch":{"id":"1","isBooked":false,"mission":{"name":"FalconSat"}}}}

Pagination

In GraphQL, fetch all necessary data fields from the server in a single query, eliminating any unnecessary overhead in terms of network response time and payload size. Unfortunately, there is no guarantee that these improvements will always occur, particularly when working with lists of structured data that have unpredictable lengths. If you ask for the complete list, which has the potential to include an unlimited number of elements, you can get delayed answers with very large payloads. Using pagination or selectively querying a list, solves this.
For example,
teacher { 

    name 

    students (first:5) { 

      name 

    } 

  } 

}
Use the arguments, limit and offset, to display results, one page at a time.
For example,
students (limit:5, afterID:152) { 

  id 

  name 

}

Batching

A GraphQL client required batching to reduce the number of round trips in a network. Batching is performed by enabling multiple operations in a single HTTP call.
By default, Batching will be enabled for all the operations on a batched client, however an operation can opt out by invoking canbeBatched(false) operation before calling the execute method.
Note:
Batching is available only for Query operations.
ColdFusion supports the following batching parameters:
"batching_configuration":{ 

            "enabled": true, // whether to enable batching on a query, mutation, or subscription 

            "batch_interval_ms": 1000, // The interval (in milliseconds) between each call. 

            "max_batch_size": 2 //  

 }

Batching functions

The following batching-related functions are supported:
startBatchPoller
Description
Starts the polling mechanism to check for queued queries to batch and send as a single HTTP call. For the function to work, you must enable “enabled”:true in the batch configuration settings.
Syntax
gqlClient.startBatchPoller() 
For example,
<cfscript> 

    gqlClient = getGraphQLClient({ 

      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 

      root_folder: "root", 

  //"raw_http_client": true, 

  headers : { 

            keys: "Authorization", 

            values: "a2FsbHVAZ21haWwuY29t" 

      }, 

      "batching_configuration":{ 

            "enabled": true, 

            "batch_interval_ms": 1000, 

            "max_batch_size": 2 

      } 

    }); 

    generateGraphQLModels();  

    writedump(gqlClient) 

    queryObj = gqlClient.query("TripsBooked", {}) 

    writedump(queryObj); 

    response=queryObj.execute() 

    writeDump(response.get("Data")) 

    

    // define the error and success closure functions 

     onSuccess = function(response) { 

        writeOutput("<br>Received Response from GraphQL Server----------<br>"); 

        writeOutput(response.toString()); 

    } 

    onError = function() { 

        writeOutput("<br>Error While Receiving Response from GraphQL Server<br>"); 

    } 

    writeOutput("<br/>"& "Active calls count" & "<br/>") 

    writeOutput(gqlClient.activeCallsCount()) 

    writeOutput("<br/>"& "Can be batched" & "<br/>") 

    gqlClient.startBatchPoller(); 

    queryObj.canBeBatched(true) 

</cfscript>
stopBatchPoller
Description
Stops the polling mechanism to check for queued queries to batch. For the function to work, you must enable “enabled”:true in the batch configuration settings.
Syntax
gqlClient.stopBatchPoller()
For example,
<cfscript> 

    gqlClient = getGraphQLClient({ 

      service_url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 

      root_folder: "root", 

  //"raw_http_client": true, 

  headers : { 

            keys: "key", 

            values: "value" 

      }, 

      "batching_configuration":{ 

            "enabled": true, 

            "batch_interval_ms": 1000, 

            "max_batch_size": 2 

      } 

    }); 

    generateGraphQLModels(); 

  

    writedump(gqlClient) 

    queryObj = gqlClient.query("TripsBooked", {}) 

    writedump(queryObj); 

    response=queryObj.execute() 

    writeDump(response.get("Data")) 

    

    // define the error and success closure functions 

     onSuccess = function(response) { 

        writeOutput("<br>Received Response from GraphQL Server----------<br>"); 

        writeOutput(response.toString()); 

    } 

    onError = function() { 

        writeOutput("<br>Error While Receiving Response from GraphQL Server<br>"); 

    } 

    writeOutput("<br/>"& "Active calls count" & "<br/>") 

    writeOutput(gqlClient.activeCallsCount()) 

    writeOutput("<br/>"& "Can be batched" & "<br/>") 

    gqlClient.startBatchPoller(); 

    queryObj.canBeBatched(true) 

    gqlClient.stopBatchPoller(); 

</cfscript>
canBeBatched(bool)
Decription
Determines whether a query can be batched.
Syntax
GqlClient.canBeBatched(bool batchedTrueOrFalse)
Parameter
  • batchedTrueOrFalse: True if you want to batch, False otherwise.
Example of batching
LaunchList.graphql
query LaunchList { 
  launches { 
    cursor 
    hasMore 
    launches { 
      id 
      site 
    } 
  } 
}
LaunchDetailsFragment.graphql
fragment launchFragment on Launch { 

  id 

  site 

  mission { 

    name 

  } 



  

query LaunchDetailsFragment($id:ID!) { 

  launch(id: $id) { 

    # Usage of named fragment 

    ...launchFragment 

  } 

}
File.cfm
Output
<cfscript> 
    gqlClient = getGraphQLClient({ 
      service_Url : "https://apollo-fullstack-tutorial.herokuapp.com/graphql", 
      root_folder: "root", 
  //"raw_http_client": true, 
  headers : { 
            keys: "key", 
            values: "value" 
      }, 
      "batching_configuration":{ 
            "enabled": true, 
            "batch_interval_ms": 1000, 
            "max_batch_size": 2 
      } 
    }); 

    generateGraphQLModels(); 
    writedump(gqlClient) 
    queryObj = gqlClient.query("LaunchList",{cursor:"1583556631"}); 

    writedump(queryObj); 

    response=queryObj.execute() 

    writeDump(response.get("Data"))  

    queryObj2 = gqlClient.query("LaunchList", {cursor:""});  

    queryObj3 = gqlClient.query("LaunchDetailsFragment",[id:"89"]); 

    response3=queryObj3.execute() 

    writeDump(response3.get("Data")) 

    //queryObj4 = gqlClient.query("LaunchDetailsFragment",[id:"90"]); 

    gqlClient.startBatchPoller();  

    queryObj.canBeBatched(true);     

    queryObj2.canBeBatched(true);     

    queryObj3.canBeBatched(true);     

    gqlClient.stopBatchPoller(); 

    writeOutput("Completed");  

</cfscript>
Output
{launches=Launches{__typename=LaunchConnection, cursor=1583556631, hasMore=true, launches=[Launch{__typename=Launch, id=110, site=KSC LC 39A}, Launch{__typename=Launch, id=109, site=CCAFS SLC 40}, Launch{__typename=Launch, id=108, site=VAFB SLC 4E}, Launch{__typename=Launch, id=107, site=KSC LC 39A}, Launch{__typename=Launch, id=106, site=CCAFS SLC 40}, Launch{__typename=Launch, id=105, site=CCAFS SLC 40}, Launch{__typename=Launch, id=104, site=KSC LC 39A}, Launch{__typename=Launch, id=103, site=KSC LC 39A}, Launch{__typename=Launch, id=102, site=KSC LC 39A}, Launch{__typename=Launch, id=101, site=CCAFS SLC 40}, Launch{__typename=Launch, id=100, site=CCAFS SLC 40}, Launch{__typename=Launch, id=99, site=KSC LC 39A}, Launch{__typename=Launch, id=98, site=CCAFS SLC 40}, Launch{__typename=Launch, id=97, site=CCAFS SLC 40}, Launch{__typename=Launch, id=96, site=CCAFS SLC 40}, Launch{__typename=Launch, id=95, site=CCAFS SLC 40}, Launch{__typename=Launch, id=94, site=KSC LC 39A}, Launch{__typename=Launch, id=93, site=KSC LC 39A}, Launch{__typename=Launch, id=92, site=KSC LC 39A}, Launch{__typename=Launch, id=91, site=CCAFS SLC 40}]}} {launch=Launch{__typename=Launch, fragments=Fragments{launchFragment=LaunchFragment{__typename=Launch, id=89, site=CCAFS SLC 40, mission=Mission{__typename=Mission, name=Starlink 3}}}}}

Share this page

Was this page helpful?
We're glad. Tell us how this page helped.
We're sorry. Can you tell us what didn't work for you?
Thank you for your feedback. Your response will help improve this page.

On this page