Apollo Server

适用于Express、Connect、Hapi、Koa等的GraphQL服务器。(GraphQL Server for Express, Connect, Hapi, Koa, Restify, Micro, Azure Functions, and AWS Lambda.)

Github stars Tracking Chart

Apollo服务器是一个灵活的、社区驱动的、生产就绪的HTTP Apollo Server插件,用于Node.js。Apollo Server是一个社区维护的开源GraphQL服务器。 它与几乎所有Node.js HTTP服务器框架一起工作,它与使用graphql-js参考实现构建的任何GraphQL模式配合使用。

它适用于使用GraphQL.js(Facebook的参考JavaScript执行库)构建的任何GraphQL模式,您可以将Apollo Server与所有流行的JavaScript HTTP服务器(包括Express,Connect,Hapi,Koa,Restify和Lambda)一起使用。

可以从任何流行的GraphQL客户端(如Apollo或Relay)查询此服务器,因为它支持所有通过HTTP发送GraphQL的常用语义,如graphql.org中所述。 Apollo Server还支持协议的一些小扩展,例如在一个请求中发送多个GraphQL操作。阅读更多关于发送请求页面。

安装它:

# Pick the one that matches your server framework (选择与您的服务器框架相匹配的)\r\nnpm install graphql apollo-server-express  # for Express or Connect\r\nnpm install graphql apollo-server-hapi\r\nnpm install graphql apollo-server-koa\r\nnpm install graphql apollo-server-restify\r\nnpm install graphql apollo-server-lambda\r\nnpm install graphql apollo-server-micro\r\n
以下功能将 Apollo Server 与 express-graphql 区分开来,express-graphql 是Facebook的参考HTTP服务器实现:
  • Apollo Server具有更简单的界面,并允许更少的发送查询的方式,这使得更容易理解发生了什么。
  • Apollo Server在单独的路线上提供GraphiQL,可以更灵活地决定何时以及如何投放。
  • Apollo Server支持查询批处理,可以帮助减少服务器的负载。
  • Apollo服务器内置支持持久查询,可以使您的应用更快速,您的服务器更安全。

Overview

Name With Ownerapollographql/apollo-server
Primary LanguageTypeScript
Program languageTypeScript (Language Count: 3)
PlatformLinux, Mac, Windows
License:MIT License
Release Count5465
Last Release Name@apollo/server-integration-testsuite@4.10.4 (Posted on 2024-04-18 15:27:54)
First Release Namev0.1.1 (Posted on 2016-04-25 15:25:52)
Created At2016-04-21 09:26:01
Pushed At2024-04-27 14:13:45
Last Commit At
Stargazers Count13.7k
Watchers Count207
Fork Count2k
Commits Count8.3k
Has Issues Enabled
Issues Count2337
Issue Open Count61
Pull Requests Count4338
Pull Requests Open Count16
Pull Requests Close Count717
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private

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

To the top