apollo 服务器和express-graphql 有什么区别

问题描述 投票:0回答:3

我想构建一个应用程序,建议使用 GraphQl 作为 API,

我不确定该选择哪个平台以及有何不同。

apollo server vs express-graphql

我的项目也需要使用 TypeScript。 任何好主意将不胜感激。

node.js graphql apollo-server
3个回答
10
投票

下面是 apollo-server README 中的 现已删除的部分,比较 apollo-serverexpress-graphql

请注意,其中一些论点不再适用,例如express-grapqhl 现在是用 TypeScript 编写的。因此,从自述文件中删除了此部分。

一个观察结果是 apollo-server 过于臃肿,并且慢慢地显示出缺乏维护。如果我今天要选择一个,我会选择 express-graphql。但这是个人喜好,您应该进行自己的尽职调查。

还有一个由社区维护的 Express-graphql Koa 端口,称为 koa-graphql。使用express-graphql或koa-graphql,结合像envelop这样的东西,你可以实现一切,甚至更多,Apollo“生态系统”以更加模块化的方式提供。

express-graphql

比较

Apollo 服务器和

express-graphql
是 用于 Node.js 的 GraphQL 服务器,构建在
graphql-js
之上 参考实现
,但是 有一些关键区别:

  • express-graphql
    与Express和Connect配合使用,Apollo Server支持Express、Connect、Hapi、Koa和Restify。
  • express-graphql
    相比,Apollo Server 的接口更简单,并且只支持一种传递查询的方式。
  • Apollo Server 分离服务 GraphiQL(浏览器内 IDE,用于 探索 GraphQL)从响应 GraphQL 请求。
  • express-graphql
    包含用于解析 HTTP 请求主体的代码,Apollo Server 将其留给标准包(如 body-parser)。
  • Apollo Server 包含一个
    OperationStore
    ,可轻松管理白名单。
  • Apollo Server 是使用 TypeScript 构建的。

应用程序/graphql 请求

express-graphql
支持
application/graphql
内容类型 requests,这是
application/json
请求的替代方案 仅以文本形式发送的查询部分。与我们使用的方式相同
bodyParser.json
解析
application/json
请求 apollo-server,我们可以使用
bodyParser.text
加上一个额外的步骤 为了也解析
application/graphql
请求。这是一个例子 对于快递:

'body-parser'; import { graphqlExpress } from 'apollo-server-express';

const myGraphQLSchema = // ... define or import your schema here!

const helperMiddleware = [
    bodyParser.json(),
    bodyParser.text({ type: 'application/graphql' }),
    (req, res, next) => {
        if (req.is('application/graphql')) {
            req.body = { query: req.body };
        }
        next();
    } ];

express()
    .use('/graphql', ...helperMiddleware, graphqlExpress({ schema: myGraphQLSchema }))
    .listen(3000); ```

5
投票

Express-GraphQL
是一个中间件,可以使用 Express 或任何支持中间件的 Web 框架快速设置 GraphQL Server。

Apollo-server 是一个位于现有节点服务器上并解析 GraphQL 查询的包。 (与express-graphql非常相似)你可以将它与express、Koa等一起使用

我的建议是使用 Graphql-yoga,因为它是用 apollo-server 和 express-graphql 构建的。此外,它是由“Prisma 团队”构建和维护的。


2
投票

我建议使用 apollo-server-express 而不是express-graphql。它们非常相似,但 apollo-server-express 有更多花哨的功能,同时拥有更简单、更清晰的 API(我认为)。

对我来说,apollo-server-express 最大的改进是游乐场:https://github.com/prisma/graphql-playground

Playground 比express-graphql 的 graphiql 更好有几个原因,但其中一大原因是它允许你在请求中放入 HTTP 标头,这更适合处理会话。

www.graphqlbin.com 将允许您在任何没有 cors 的端点上使用 Playground。如果您有 cors,那么您将需要直接从您的服务器运行 Playground。

以下是帮助您入门的代码示例:

const { ApolloServer } = require('apollo-server-express')
const graphqlServer = new ApolloServer({
  schema,
  introspection: true,
  playground: true,
})
graphqlServer.applyMiddleware({
  app
})
© www.soinside.com 2019 - 2024. All rights reserved.