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

Health checks

Determining the health status of Apollo Server


Apollo Server 4 no longer supports built-in health checks. Instead, we recommend performing GraphQL-level health checks to ensure your server successfully serves traffic and performs .

Load balancers often use health checks to determine if a server is available and ready to serve traffic.

GraphQL-level health checks

The easiest way to determine if your is healthy is to run a GraphQL .

Every GraphQL server supports a trivial that requests the __typename of the top-level Query type. This means every GraphQL server can respond to a GET request to a URL such as:

https://your.server/graphql?query=%7B__typename%7D

Note that this health check will run an actual GraphQL operation. If your server requires special headers or cookies to run any query, you'll need to provide those with your request.

Sending an apollo-require-preflight: true header alongside your health check ensures that 's CSRF prevention feature won't block it.

If you want to create a health check for your HTTP server that is unrelated to the health of the GraphQL execution engine (i.e., such as Apollo Server 3's health check feature), you can add a GET handler that always succeeds to your web framework.

Below is an example of an HTTP server health check with expressMiddleware:

// imports, etc.
const app = express();
const server = new ApolloServer({
typeDefs,
resolvers,
});
await server.start();
app.use('/graphql', cors<cors.CorsRequest>(), express.json(), expressMiddleware(server));
await new Promise<void>((resolve) => app.listen({ port: 4000 }, resolve));
// Our GraphQL server is listening for GraphQL operations
// on `http://localhost:4000/graphql`
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
// Requests to `http://localhost:4000/health` now return "Okay!"
app.get('/health', (req, res) => {
res.status(200).send('Okay!');
});
// imports, etc.
const app = express();
const server = new ApolloServer({
typeDefs,
resolvers,
});
await server.start();
app.use('/graphql', cors(), express.json(), expressMiddleware(server));
await new Promise((resolve) => app.listen({ port: 4000 }, resolve));
// Our GraphQL server is listening for GraphQL operations
// on `http://localhost:4000/graphql`
console.log(`🚀 Server ready at http://localhost:4000/graphql`);
// Requests to `http://localhost:4000/health` now return "Okay!"
app.get('/health', (req, res) => {
res.status(200).send('Okay!');
});

If you are using startStandaloneServer, you must first swap to using the expressMiddleware function before creating an HTTP server health check.

Previous
Metrics and logging
Next
ApolloServer
Rate articleRateEdit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company