The Wayback Machine - https://web.archive.org/web/20200615032754/https://github.com/apollographql/apollo-server
Skip to content
🌍 GraphQL server for Express, Connect, Hapi, Koa and more
TypeScript Other
Branch: master
Clone or download

Latest commit

renovate and renovate-bot chore(deps): update dependency lerna to v3.22.1 (#4252)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Latest commit bbed182 Jun 13, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Follow-up c68c577 by completely disabling Node.js 6 tests. Apr 7, 2020
.github chore: Change link in release PR template to reference `is:closed`. Apr 10, 2020
.vscode Revert "REVERT ME: Changed jest to only test gateway requires. Added … May 4, 2020
__mocks__ ApolloGateway: Construct and use RemoteGraphQLDataSource to issue int… Aug 22, 2019
docs chore(deps): update dependency gatsby to v2.23.3 (#4251) Jun 13, 2020
packages Release Jun 12, 2020
types Add missing types May 14, 2020
.editorconfig Introduce an `.editorconfig`. Sep 16, 2019
.gitignore Update .gitignore and change to toArray Feb 7, 2020
.prettierignore Move prettier file globs into `.prettierrc.js` file. Sep 26, 2018
.prettierrc.js Move prettier file globs into `.prettierrc.js` file. Sep 26, 2018
CHANGELOG.md Final updates to changelog before release Jun 12, 2020
CONTRIBUTING.md Replace Slack with Spectrum Feb 5, 2020
DESIGN.md Tick off Prettier checkmarks, which were present on CI but not locall… Mar 16, 2018
DEVELOPMENT.md Start a DEVELOPMENT.md and add an APOLLO_RELEASE_TEMPLATE.md file. Feb 6, 2020
LICENSE Update LICENSE year. Dec 13, 2019
README.md Use the README.md from `packages/apollo-server` as the monorepo root … Feb 26, 2019
ROADMAP.md Update the ROADMAP.md with the latest for Apollo Server 3.x. Aug 27, 2019
codecov.yml Allow 0.5% drop in codecov since it sometimes drops by tenths of perc… Oct 30, 2018
jest.config.base.js Revert "REVERT ME: Changed jest to only test gateway requires. Added … May 4, 2020
lerna.json Automate publishing via Git tag-triggered CircleCI workflows. (#3246) Sep 5, 2019
netlify.toml Update netlify.toml Oct 28, 2019
package-lock.json chore(deps): update dependency lerna to v3.22.1 (#4252) Jun 13, 2020
package.json chore(deps): update dependency lerna to v3.22.1 (#4252) Jun 13, 2020
renovate.json5 To support Node.js 6, use older version of `log4js` for testing. Mar 16, 2020
tsconfig.base.json Enable `forceConsistentCasingInFileNames` in `tsconfig.base.json` Oct 11, 2018
tsconfig.build.json Add monorepo plumbing for plugin package May 14, 2020
tsconfig.json Remove test dependencies from non-test `tsconfig.json` files Oct 11, 2018
tsconfig.test.base.json Remove `apollo-env` dependency from `@apollo/federation` package (#3463) Nov 12, 2019
tsconfig.test.json Add monorepo plumbing for plugin package May 14, 2020

README.md

Apollo Server

GraphQL Server for Express, Koa, Hapi, Lambda, and more.

npm version Build Status Join the community on Spectrum

Apollo Server is a community-maintained open-source GraphQL server. It works with pretty much all Node.js HTTP server frameworks, and we're happy to take PRs to add more! Apollo Server works with any GraphQL schema built with GraphQL.js--so you may build your schema with that or a convenience library such as graphql-tools.

Principles

Apollo Server is built with the following principles in mind:

  • By the community, for the community: Its development is driven by the needs of developers.
  • Simplicity: By keeping things simple, it is more secure and easier to implement and contribute.
  • Performance: It is well-tested and production-ready.

Anyone is welcome to contribute to Apollo Server, just read CONTRIBUTING.md, take a look at the roadmap and make your first PR!

Getting started

To get started with Apollo Server:

  • Install with npm install apollo-server-<integration>
  • Write a GraphQL schema
  • Use one of the following snippets

There are two ways to install Apollo Server:

  • Standalone: For applications that do not require an existing web framework, use the apollo-server package.
  • Integrations: For applications with a web framework (e.g. express, koa, hapi, etc.), use the appropriate Apollo Server integration package.

For more info, please refer to the Apollo Server docs.

Installation: Standalone

In a new project, install the apollo-server and graphql dependencies using:

npm install apollo-server graphql

Then, create an index.js which defines the schema and its functionality (i.e. resolvers):

const { ApolloServer, gql } = require('apollo-server');

// The GraphQL schema
const typeDefs = gql`
  type Query {
    "A simple type for getting started!"
    hello: String
  }
`;

// A map of functions which return data for the schema.
const resolvers = {
  Query: {
    hello: () => 'world',
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

server.listen().then(({ url }) => {
  console.log(`πŸš€ Server ready at ${url}`);
});

Due to its human-readability, we recommend using schema-definition language (SDL) to define a GraphQL schema--a GraphQLSchema object from graphql-js can also be specified instead of typeDefs and resolvers using the schema property:

const server = new ApolloServer({
  schema: ...
});

Finally, start the server using node index.js and go to the URL returned on the console.

For more details, check out the Apollo Server Getting Started guide and the fullstack tutorial.

For questions, the Apollo community on Spectrum.chat is a great place to get help.

Installation: Integrations

While the standalone installation above can be used without making a decision about which web framework to use, the Apollo Server integration packages are paired with specific web frameworks (e.g. Express, Koa, hapi).

The following web frameworks have Apollo Server integrations, and each of these linked integrations has its own installation instructions and examples on its package README.md:

Context

A request context is available for each request. When context is defined as a function, it will be called on each request and will receive an object containing a req property, which represents the request itself.

By returning an object from the context function, it will be available as the third positional parameter of the resolvers:

new ApolloServer({
  typeDefs,
  resolvers: {
    Query: {
      books: (parent, args, context, info) => {
        console.log(context.myProperty); // Will be `true`!
        return books;
      },
    }
  },
  context: async ({ req }) => {
    return {
      myProperty: true
    };
  },
})

Documentation

The Apollo Server documentation contains additional details on how to get started with GraphQL and Apollo Server.

The raw Markdown source of the documentation is available within the docs/ directory of this monorepo--to contribute, please use the Edit on GitHub buttons at the bottom of each page.

Development

If you wish to develop or contribute to Apollo Server, we suggest the following:

  • Fork this repository

  • Install the Apollo Server project on your computer

git clone https://github.com/[your-user]/apollo-server
cd apollo-server
npm install
cd packages/apollo-server-<integration>/
npm link
  • Install your local Apollo Server in the other App
cd ~/myApp
npm link apollo-server-<integration>

Community

Are you stuck? Want to contribute? Come visit us in the Apollo community on Spectrum.chat!

Maintainers

You can’t perform that action at this time.