
Previously, we were planning to offer two kinds of APIs in "Apollo Server 2": middleware functions just like in 1.0, and the new ApolloServer class. We have not yet implemented ApolloServer for all of our supported web frameworks, so this meant that the 2.0 version of modules such as apollo-server-koa (which does not yet have an ApolloServer class) offered very little benefits over apollo-server-koa@1.0 (as most of the benefits of 2.0 come from ApolloServer). This is confusing. We are going to improve the current registerServer API so that there's no real benefit to using a separately-exported middleware directly rather than creating an ApolloServer and applying it to your web framework. So the AS 2.0 API will just be ApolloServer. This means it doesn't make sense for us to publish 2.x versions of the packages that don't yet support this API. So this commit removes support for the following web frameworks: Adonis, Azure Functions, Koa, Lambda, Micro, and Restify. (We leave in place Express, Hapi, and Cloudflare workers.) This isn't because we don't like these frameworks and don't want them to work with Apollo Server 2.0! We would love to see each package resurrected and an ApolloServer implementation built, either during this current 2.x beta phase or after the official 2.0 release. Deleting these packages for now makes it more clear which frameworks support 2.0 and which don't, rather than existing in a state where apollo-server-express@2 has ApolloServer and apollo-server-koa@2 does not.
3.4 KiB
title | description |
---|---|
Hapi | Setting up Apollo Server with Hapi |
This is the Hapi integration of Apollo Server. Apollo Server is a community-maintained open-source Apollo Server that works with many Node.js HTTP server frameworks. Read the docs. Read the CHANGELOG.
npm install apollo-server-hapi@beta
Usage
After constructing Apollo server, a hapi server can be enabled with a call to registerServer
. Ensure that autoListen
is set to false in the Hapi.server
constructor.
The code below requires Hapi 17 or higher.
const { registerServer, ApolloServer, gql } = require('apollo-server-hapi');
const HOST = 'localhost';
const typeDefs = gql`
type Query {
hello: String
}
`;
const resolvers = {
Query: {
hello: () => 'hello',
},
}
async function StartServer() {
const server = new ApolloServer({ typeDefs, resolvers });
await registerServer({
server,
//Hapi Server constructor options
options: {
host: HOST,
},
});
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
}
StartServer().catch(error => console.log(error));
For more advanced use cases or migrating from 1.x, a Hapi server can be constructed and passed into registerServer
.
const { ApolloServer, gql, registerServer } = require('apollo-server-hapi');
const Hapi = require('hapi');
async function StartServer() {
const server = new ApolloServer({ typeDefs, resolvers });
const app = new Hapi.server({
//autoListen must be set to false, since Apollo Server will setup the listener
autoListen: false,
host: HOST,
});
await registerServer({
server,
app,
});
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
}
StartServer().catch(error => console.log(error));
Context
The context is created for each request. The following code snippet shows the creation of a context. The arguments are the request
, the request, and h
, the response toolkit.
new ApolloServer({
typeDefs,
resolvers,
context: async ({ request, h }) => {
return { ... };
},
})
Principles
Apollo Server is built with the following principles in mind:
- By the community, for the community: Apollo Server's development is driven by the needs of developers
- Simplicity: by keeping things simple, Apollo Server is easier to use, easier to contribute to, and more secure
- Performance: Apollo Server is well-tested and production-ready - no modifications needed
Anyone is welcome to contribute to Apollo Server, just read CONTRIBUTING.md, take a look at the roadmap and make your first PR!