apollo-server/packages/apollo-server-micro
Jesse Rosenberger 8347511db8 Switch to a fork of apollo-upload-server to fix missing core-js dependency. (#1556)
* Switch to a fork of `apollo-upload-server` to fix missing `core-js` dependency.

As reported in https://github.com/apollographql/apollo-server/issues/1542,
the `apollo-upload-server` package (v5.0.0, which `apollo-server` relies on)
is no longer able to provide a `core-js` package because of change that was
outside of its control in a Babel release.

The problem is resolved in newer versions of `apollo-upload-server`,
however, regrettably, the newer versions of that package (notably, v6 and
v7) drop support for Node.js 6 — one of two versions of Node.js that are
currently under the terms of the Node.js Foundation's Long-Term-Support
(LTS) agreements.

Since Apollo Server aims to support versions of Node.js which are under LTS
(and will drop support for Node.js 6 in April 2019, per Node.js' schedule)
the current, immediate solution is to fork the `apollo-upload-server`
package as `@apollographql/apollo-upload-server`.

With the inclusion of
https://github.com/apollographql/apollo-upload-server/pull/1, we are able to
keep supporting Node.js 6.  Without this change, every new installation
of `apollo-server`, which doesn't have a `package-lock.json` preventing
transitive dependency updates - specifically, the updates to
`@babel/runtime` versions newer than `-beta.56` - is broken.

* [squash] Update to `@apollographql/apollo-upload-server@5.0.2`.

* [squash] Update to `@apollographql/apollo-upload-server@5.0.3`.
2018-08-20 13:27:15 -07:00
..
src Switch to a fork of apollo-upload-server to fix missing core-js dependency. (#1556) 2018-08-20 13:27:15 -07:00
.npmignore Apollo Server 2 Micro integration (#1279) 2018-07-05 11:40:15 -07:00
package.json Switch to a fork of apollo-upload-server to fix missing core-js dependency. (#1556) 2018-08-20 13:27:15 -07:00
README.md Apollo Server 2 Micro integration (#1279) 2018-07-05 11:40:15 -07:00
tsconfig.json Use strict top-level tsconfig and fix type issues or override per-package 2018-08-11 16:45:03 +02:00

title description
Micro Setting up Apollo Server with Micro

npm version Build Status Coverage Status Get on Slack

This is the Micro integration for the Apollo community GraphQL Server. Read the docs. Read the CHANGELOG.

Basic GraphQL Microservice

This example demonstrates how to setup a simple microservice, using Micro, that handles incoming GraphQL requests via the default /graphql endpoint.

  1. Package installation.
npm install --save micro apollo-server-micro@rc graphql
  1. index.js
const { ApolloServer, gql } = require('apollo-server-micro');

const typeDefs = gql`
  type Query {
    sayHello: String
  }
`;

const resolvers = {
  Query: {
    sayHello(root, args, context) {
      return 'Hello World!';
    },
  },
};

const apolloServer = new ApolloServer({ typeDefs, resolvers });
module.exports = apolloServer.createHandler();
  1. package.json
{
  "main": "index.js",
  "scripts": {
    "start": "micro"
  }
}
  1. After an npm start, access http://localhost:3000/graphql in your browser to run queries using graphql-playground, or send GraphQL requests directly to the same URL.

CORS Example

This example demonstrates how to setup a simple Micro + CORS + GraphQL microservice, using micro-cors:

  1. Package installation.
npm install --save micro micro-cors apollo-server-micro@rc graphql
  1. index.js
const cors = require('micro-cors')();
const { ApolloServer, gql } = require('apollo-server-micro');

const typeDefs = gql`
  type Query {
    sayHello: String
  }
`;

const resolvers = {
  Query: {
    sayHello(root, args, context) {
      return 'Hello World!';
    },
  },
};

const apolloServer = new ApolloServer({ typeDefs, resolvers });
module.exports = cors(apolloServer.createHandler());
  1. package.json
{
  "main": "index.js",
  "scripts": {
    "start": "micro"
  }
}
  1. After an npm start, access http://localhost:3000/graphql in your browser to run queries using graphql-playground, or send GraphQL requests directly to the same URL.

Custom GraphQL Path Example

This example shows how to setup a simple Micro + GraphQL microservice, that uses a custom GraphQL endpoint path:

  1. Package installation.
npm install --save micro apollo-server-micro@rc graphql
  1. index.js
const { ApolloServer, gql } = require('apollo-server-micro');

const typeDefs = gql`
  type Query {
    sayHello: String
  }
`;

const resolvers = {
  Query: {
    sayHello(root, args, context) {
      return 'Hello World!';
    },
  },
};

const apolloServer = new ApolloServer({ typeDefs, resolvers });
module.exports = apolloServer.createHandler({ path: '/data' });
  1. package.json
{
  "main": "index.js",
  "scripts": {
    "start": "micro"
  }
}
  1. After an npm start, access http://localhost:3000/graphql in your browser to run queries using graphql-playground, or send GraphQL requests directly to the same URL.

Fully Custom Routing Example

This example demonstrates how to setup a simple Micro + GraphQL microservice, that uses micro-router for fully custom routing:

  1. Package installation.
npm install --save micro microrouter apollo-server-micro@rc graphql
  1. index.js
const { router, get, post, options } = require('microrouter');
const { ApolloServer, gql } = require('apollo-server-micro');

const typeDefs = gql`
  type Query {
    sayHello: String
  }
`;

const resolvers = {
  Query: {
    sayHello(root, args, context) {
      return 'Hello World!';
    },
  },
};

const apolloServer = new ApolloServer({ typeDefs, resolvers });
const graphqlPath = '/data';
const graphqlHandler = apolloServer.createHandler({ path: graphqlPath });
module.exports = router(
  get('/', (req, res) => 'Welcome!'),
  options(graphqlPath, graphqlHandler),
  post(graphqlPath, graphqlHandler),
  get(graphqlPath, graphqlHandler),
);
  1. package.json
{
  "main": "index.js",
  "scripts": {
    "start": "micro"
  }
}
  1. After an npm start, access http://localhost:3000/graphql in your browser to run queries using graphql-playground, or send GraphQL requests directly to the same URL.