What is the difference between apollo server and express-graphql

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-graphql

Both Apollo Server and
express-graphql are
GraphQL servers for Node.js, built on top of the graphql-js
reference implementation, but
there are a few key differences:

  • express-graphql works 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-graphql contains code for parsing HTTP request bodies, Apollo Server leaves that to standard packages like body-parser.
  • Apollo Server includes an OperationStore to easily manage whitelisting.
  • Apollo Server is built with TypeScript.

application/graphql requests

express-graphql supports the application/graphql Content-Type for
requests, which is an alternative to application/json request with
only the query part sent as text. In the same way that we use
bodyParser.json to parse application/json requests for
apollo-server, we can use bodyParser.text plus one extra step in
order to also parse application/graphql requests. 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); ```

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)