Join us from October 8-10 in New York City to learn the latest tips, trends, and news about GraphQL Federation and API platform engineering.Join us for GraphQL Summit 2024 in NYC
Docs
Start for Free

Operation Request Format

Send requests to the router over HTTP


By default, almost every IDE and client library takes care of sending in a format that the or supports. This article describes that format, which is also described on graphql.org and in this preliminary spec.

The accepts queries, , and sent as POST requests. It also accepts queries sent as GET requests.

POST requests

The router accepts POST requests with a JSON body. A valid request contains a query , along with optional variables and an operationName (if query contains multiple possible operations).

Let's say we want to execute the following :

query GetBestSellers($category: ProductCategory) {
bestSellers(category: $category) {
title
}
}

Here's an example of a valid POST request body for that query:

{
"query":"query GetBestSellers($category: ProductCategory){bestSellers(category: $category){title}}",
"operationName": "GetBestSellers",
"variables": { "category": "BOOKS" }
}

Note that operationName isn't required for this particular request body, because query includes only one definition.

You can execute this query against an Apollo-hosted example server right now with the following curl command:

curl --request POST \
-H 'Content-Type: application/json' \
--data '{"query":"query GetBestSellers($category:ProductCategory){bestSellers(category: $category){title}}", "operationName":"GetBestSellers", "variables":{"category":"BOOKS"}}' \
https://rover.apollo.dev/quickstart/products/graphql

The router's default landing page provides a curl command you can use to execute a test query on your own server:

GET requests

The router also accepts GET requests for queries (but not mutations). With a GET request, query details (query, operationName, variables) are provided as URL query parameters. The variables option is a URL-escaped JSON object.

Here's the same query from POST requests formatted for a curl GET request:

curl --request GET \
https://rover.apollo.dev/quickstart/products/graphql?query=query%20GetBestSellers%28%24category%3AProductCategory%29%7BbestSellers%28category%3A%20%24category%29%7Btitle%7D%7D&operationName=GetBestSellers&variables=%7B%22category%22%3A%22BOOKS%22%7D

Persisted queries protocol

The () feature available for Apollo Router Core and the () feature available for GraphOS Router use a separate protocol to send the operation information in the extensions. This protocol can also use HTTP POST or GET. See the docs on the APQ protocol for details.

Previous
@defer Support
Next
Query Batching
Rate articleRateEdit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc., d/b/a Apollo GraphQL.

Privacy Policy

Company