How to Curl a GraphQL API?

In the last few months, I have been implementing a GraphQL server in TypeScript and NodeJS using Apollo. You can build your query with the playground and see the result immediately. At the top, a “Curl” button generates a Curl command. However, it writes the command with many options that are not required.

The generated command line has “–compressed” and “–data-binary” which might be fine for few people but in some case, these options were not available. I figure out that you do not need to provide them and still be able to invoke the GraphQL server.

curl '' \ 
  -H 'Accept-Encoding: gzip, deflate, br' \
  -H 'Content-Type: application/json' \ 
  -H 'Accept: application/json' \
  -H 'Connection: keep-alive' \
  -H 'DNT: 1' \
  -H 'Origin:' \
  --data-binary '{"query":"{\n  org(orgId: 0) {\n    nameLong,\n    nameShort\n  }\n}\n"}' \

The generated Curl command line for GraphQL has many headers that can be removed. In my case, I needed to add the authorization header because the service is private.

curl \
  -X POST \
  -H "Content-Type: application/json" \
  -H "authorization: Bearer xxx" \
  --data '{"query":"{\n  org(orgId: 0) {\n    nameLong,\n    nameShort\n  }\n}\n"}' \

However, even with the additional header, the command is more straightforward. Instead of requesting the data with “–data-binary”, it is possible to query with “–data”. The compression can be removed if the “accept-encoding” is not specified. The content we will receive is of JSON type, hence we need to specify the “content-type”

In conclusion, this was a short essay on how to use Curl with GraphQL. It can be handy if you have internal tools that mimic Curl but without the more advanced options like compression or binary data.

If you like my article, think to buy my annual book, professionally edited by a proofreader. directly from me or on Amazon. I also wrote a TypeScript book called Holistic TypeScript

1 thought on “How to Curl a GraphQL API?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.