apollo-server vs express-graphql
GraphQL 伺服器框架
apollo-serverexpress-graphql類似套件:

GraphQL 伺服器框架

GraphQL 伺服器框架是用於構建 GraphQL API 的工具,提供了一種靈活的方式來查詢和操作數據。這些框架簡化了 API 的開發過程,並提供了強大的功能來處理請求、解析器和中介軟體。Apollo Server 和 Express-GraphQL 是兩個流行的選擇,它們各自具有不同的特性和優勢,適合不同的使用場景和需求。

npm下載趨勢

3 年

GitHub Stars 排名

統計詳情

套件
下載數
Stars
大小
Issues
發布時間
許可
apollo-server013,95826.6 kB903 年前MIT
express-graphql06,249-546 年前MIT

功能比較: apollo-server vs express-graphql

易用性

  • apollo-server:

    Apollo Server 提供了直觀的 API 和豐富的文檔,使得開發者能夠快速上手。它支持多種中介軟體和插件,並能輕鬆集成到現有的應用中。

  • express-graphql:

    Express-GraphQL 的設置相對簡單,尤其是對於已經熟悉 Express 的開發者。只需幾行代碼即可創建 GraphQL 端點,適合快速開發和原型設計。

功能擴展性

  • apollo-server:

    Apollo Server 提供了許多內建功能,如快取、錯誤處理和訂閱。它還支持多種數據來源的集成,並能與 Apollo Client 無縫協作。

  • express-graphql:

    Express-GraphQL 雖然功能較為簡單,但可以通過 Express 的中介軟體來擴展功能。這使得開發者可以靈活地添加自定義邏輯和中介軟體。

性能

  • apollo-server:

    Apollo Server 在性能方面表現優異,特別是在處理複雜查詢和多數據源時。它的快取機制能顯著提高查詢效率,減少不必要的數據請求。

  • express-graphql:

    Express-GraphQL 的性能取決於 Express 應用的設計。對於簡單的查詢,它的性能良好,但在處理複雜查詢時,可能需要額外的優化。

社區支持

  • apollo-server:

    Apollo 擁有活躍的社區和豐富的資源,提供了許多教學和範例,幫助開發者更好地利用其功能。

  • express-graphql:

    Express-GraphQL 也有良好的社區支持,但相對於 Apollo Server,資源和範例可能較少。

學習曲線

  • apollo-server:

    由於 Apollo Server 提供了許多功能和選項,學習曲線可能相對較陡,但其文檔詳細,能幫助開發者快速掌握。

  • express-graphql:

    Express-GraphQL 的學習曲線較平緩,對於熟悉 Express 的開發者來說,能夠快速上手並實現基本功能。

如何選擇: apollo-server vs express-graphql

  • apollo-server:

    選擇 Apollo Server 如果你需要一個功能豐富且易於擴展的解決方案,特別是當你打算使用 Apollo Client 進行前端開發時。它提供了許多內建功能,如快取、訂閱和集成多種數據來源的能力。

  • express-graphql:

    選擇 Express-GraphQL 如果你已經在使用 Express 框架,並希望將 GraphQL 集成到現有的 Express 應用中。它提供了一個簡單的方式來設置 GraphQL 端點,並且對於小型或中型應用來說非常輕量級。

apollo-server 的 README

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

Who is Apollo?

Apollo builds open-source software and a graph platform to unify GraphQL across your apps and services. We help you ship faster with:

  • Apollo Studio – A free, end-to-end platform for managing your GraphQL lifecycle. Track your GraphQL schemas in a hosted registry to create a source of truth for everything in your graph. Studio provides an IDE (Apollo Explorer) so you can explore data, collaborate on queries, observe usage, and safely make schema changes.
  • Apollo Federation – The industry-standard open architecture for building a distributed graph. Use Apollo’s gateway to compose a unified graph from multiple subgraphs, determine a query plan, and route requests across your services.
  • Apollo Client – The most popular GraphQL client for the web. Apollo also builds and maintains Apollo iOS and Apollo Android.
  • Apollo Server – A production-ready JavaScript GraphQL server that connects to any microservice, API, or database. Compatible with all popular JavaScript frameworks and deployable in serverless environments.

Learn how to build with Apollo

Check out the Odyssey learning platform, the perfect place to start your GraphQL journey with videos and interactive code challenges. Join the Apollo Community to interact with and get technical help from the GraphQL community.