Apollo Server 2 is officially end-of-life as of 22 October 2023.

Learn more about upgrading.

POST and GET format

How to send requests to Apollo Server over HTTP.


Apollo Server accepts both GET and POST requests.

POST requests

Apollo Server accepts POST requests with a JSON body. A valid request must contain either a query or an operationName (or both, in case of a named query), and may include variables. Here's an example for a valid body of a post request:

JavaScript
1{
2  "query": "query aTest($arg1: String!) { test(who: $arg1) }",
3  "operationName": "aTest",
4  "variables": { "arg1": "me" }
5}

Variables can be an object or a JSON-encoded string. I.e. the following is equivalent to the previous query:

JavaScript
1{
2  "query": "query aTest($arg1: String!) { test(who: $arg1) }",
3  "operationName": "aTest",
4  "variables": "{ \"arg1\": \"me\" }"
5}

Batching

A batch of queries can be sent by simply sending a JSON-encoded array of queries, e.g.

JavaScript
1[{ query: '{ testString }' }, { query: 'query q2{ test(who: "you" ) }' }];

If a batch of queries is sent, the response will be an array of GraphQL responses.

If Apollo Server is running under a different origin than your client, you will need to enable CORS support on the server, or proxy the GraphQL requests through a web server under the main origin.

GET requests

Apollo Server also accepts GET requests. A GET request must pass query and optionally variables and operationName in the URL.

Here is the same query from above in a well-formatted GET request to Apollo Server:

Text
1GET /graphql?query=query%20aTest(%24arg1%3A%20String!)%20%7B%20test(who%3A%20%24arg1)%20%7D&operationName=aTest&variables=me

caveat: Mutations cannot be executed via GET requests.

Feedback

Edit on GitHub

Forums