Below is the now deleted section from the apollo-server README comparing apollo-server to express-graphql.
Note that some of these arguments do not apply anymore e.g. express-grapqhl is now written in TypeScript. Hence the removal of this section from the README.
One observation is that apollo-server is too bloated, and is slowly showing a lack of maintenance. I would go with express-graphql instead if I were to pick one today. But this is personal preference and you should do your own due diligence.
There’s also a community-maintained Koa port of express-graphql, called koa-graphql. Using either express-graphql, or koa-graphql, combined with something like envelop, you can achieve everything, if not more, the Apollo “ecosystem” provides in a more modular manner.
Comparison with
express-graphqlBoth Apollo Server and
express-graphqlare
GraphQL servers for Node.js, built on top of thegraphql-js
reference implementation, but
there are a few key differences:
express-graphqlworks with Express and Connect, Apollo Server supports Express, Connect, Hapi, Koa and Restify.- Compared to
express-graphql, Apollo Server has a simpler interface and supports exactly one way of passing queries.- Apollo Server separates serving GraphiQL (an in-browser IDE for
exploring GraphQL) from responding to GraphQL requests.express-graphqlcontains code for parsing HTTP request bodies, Apollo Server leaves that to standard packages like body-parser.- Apollo Server includes an
OperationStoreto easily manage whitelisting.- Apollo Server is built with TypeScript.
application/graphql requests
express-graphqlsupports theapplication/graphqlContent-Type for
requests, which is an alternative toapplication/jsonrequest with
only the query part sent as text. In the same way that we use
bodyParser.jsonto parseapplication/jsonrequests for
apollo-server, we can usebodyParser.textplus one extra step in
order to also parseapplication/graphqlrequests. Here’s an example
for Express:'body-parser'; import { graphqlExpress } from 'apollo-server-express'; const myGraphQLSchema = // ... define or import your schema here! const helperMiddleware = [ bodyParser.json(), bodyParser.text({ type: 'application/graphql' }), (req, res, next) => { if (req.is('application/graphql')) { req.body = { query: req.body }; } next(); } ]; express() .use('/graphql', ...helperMiddleware, graphqlExpress({ schema: myGraphQLSchema })) .listen(3000); ```