apollo-server
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.2 • Public • Published

    Apollo Server

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

    npm version Build Status Join the community forum Read CHANGELOG

    Apollo Server is a community-maintained open-source GraphQL server. It works with many Node.js HTTP server frameworks, or can run on its own with a built-in Express server. Apollo Server works with any GraphQL schema built with GraphQL.js--or define a schema's type definitions using schema definition language (SDL).

    Read the documentation for information on getting started and many other use cases and follow the CHANGELOG for updates.

    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> graphql
    • 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 forum 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 Direnv (a tool that automatically sets up environment variables in project directories) or nvm. We use nvm to ensure we're running the expected version of Node (and we use Direnv to install and run nvm automatically).

    • Install the Apollo Server project on your computer

    git clone https://github.com/[your-user]/apollo-server
    cd apollo-server
    direnv allow  # sets up nvm for you; if you installed nvm yourself, try `nvm install` instead
    
    • Build and test
    npm install
    npm test
    
    • To run individual test files, run npm run pretest && npx jest packages/apollo-server-foo/src/__tests__/bar.test.ts. Note that you do need to re-compile TypeScript before each time you run a test, or changes across packages may not be picked up. Instead of running npm run pretest from scratch before each test run, you can also run tsc --build tsconfig.json --watch in another shell, or use the VSCode Run Build Task to run that for you.

    Community

    Are you stuck? Want to contribute? Come visit us in the Apollo community forum!

    Maintainers

    Install

    npm i apollo-server

    DownloadsWeekly Downloads

    444,576

    Version

    3.0.2

    License

    MIT

    Unpacked Size

    84.5 kB

    Total Files

    16

    Last publish

    Collaborators

    • avatar