GraphQL#
This handler allows you to load remote GraphQL schemas and use them with schema-stitching based on graphql-tools
.
To get started, install the handler library:
yarn add @graphql-mesh/graphql
pnpm add @graphql-mesh/graphql
npm install @graphql-mesh/graphql
Now, you can use it directly in your Mesh config file:
sources:
- name: MyGraphQLApi
handler:
graphql:
endpoint: http://my-service-url:3000/graphql
You can check out our example that uses schema stitching with a PostgreSQL data source. Click here to open the example on GitHub
Dynamic Header Values (e.g., for Authorization)#
Mesh can take dynamic values from the GraphQL Context or the environmental variables. For example, if you use mesh dev
or mesh start
, GraphQL Context will be the incoming HTTP request.
The expression inside dynamic values should be as in JS.
From Context (HTTP Header for mesh dev
or mesh start
)#
sources:
- name: MyGraphQLApi
handler:
graphql:
endpoint: http://my-service-url:3000/graphql
operationHeaders:
# Please do not use capital letters while getting the headers
Authorization: Bearer {context.headers['x-my-api-token']}
# You can also access to the cookies like below;
# Authorization: Bearer {context.cookies.myApiToken}
And for mesh dev
or mesh start
, you can pass the value using x-my-graphql-api-token
HTTP header.
From Environmental Variable#
MY_API_TOKEN
is the name of the environmental variable you have the value.
sources:
- name: MyGraphQLApi
handler:
graphql:
endpoint: http://my-service-url:3000/graphql
operationHeaders:
Authorization: Bearer {env.MY_API_TOKEN}
Config API Reference#
-
endpoint
(type:String
, required) - A url or file path to your remote GraphQL endpoint. If you provide a path to a code file(js or ts), other options will be ignored and the schema exported from the file will be used directly. -
schemaHeaders
(type:Any
) - JSON object representing the Headers to add to the runtime of the API calls only for schema introspection -
operationHeaders
(type:JSON
) - JSON object representing the Headers to add to the runtime of the API calls only for operation during runtime -
useGETForQueries
(type:Boolean
) - Use HTTP GET for Query operations -
method
(type:String (GET | POST)
) - HTTP method used for GraphQL operations -
customFetch
(type:Any
) - Path to a custom W3 Compatible Fetch Implementation -
webSocketImpl
(type:String
) - Path to a custom W3 Compatible WebSocket Implementation -
introspection
(type:String
) - Path to the introspection You can seperately give schema introspection -
multipart
(type:Boolean
) - Enable multipart/formdata in order to support file uploads -
subscriptionsProtocol
(type:String (SSE | WS | LEGACY_WS)
) - SSE - Server Sent Events WS - New graphql-ws LEGACY_WS - Legacy subscriptions-transport-ws -
retry
(type:Int
) - Retry attempts if fails -
timeout
(type:Int
) - Timeout in milliseconds -
batch
(type:Boolean
) - Enable/Disable automatic query batching or -
schema
(type:Any
, required) - A file path to your GraphQL Schema If you provide a path to a code file(js or ts), other options will be ignored and the schema exported from the file will be used directly.