GraphQL 是一种用于 API 的查询语言,由 Facebook 在 2015 年开源发布。它提供了一种更加高效、强大和灵活的方式来设计和查询 API。而 Apollo-Server-Express 是一个基于 Express 的 GraphQL 服务器,它提供了一种快速、易用且可扩展的方式来构建 GraphQL API。
本文将介绍如何使用 Apollo-Server-Express 为应用程序提供可扩展的 GraphQL API。我们将从安装和配置开始,然后介绍如何定义 GraphQL 的 Schema 和 Resolver,最后演示如何使用 GraphQL API 进行查询和变更。
安装和配置
首先,我们需要安装 Apollo-Server-Express 和相关依赖:
npm install apollo-server-express express graphql
然后,我们需要创建一个新的 Express 应用程序,并在其中添加 Apollo-Server-Express 中间件:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ------------- --- - - --------------------------------- ----- --- - ---------- ----- ------ - --- -------------- --------- ---- ---- ----- - ------ ------ - -- ---------- - ------ - ------ -- -- ------ ------- - - --- ------------------------ --- --- ------------ ----- ---- -- -- -- --------------- ------ ----- -- -------------------------------------------- --
在上面的代码中,我们创建了一个新的 Express 应用程序,并添加了 Apollo-Server-Express 中间件。我们还定义了一个简单的 GraphQL Schema,其中包含一个名为 hello 的查询字段和一个对应的 Resolver。
最后,我们启动 Express 应用程序并监听端口 4000。如果一切顺利,我们应该可以在浏览器中访问 http://localhost:4000/graphql
并执行以下查询:
{ hello }
查询结果应该是:
{ "data": { "hello": "Hello world!" } }
定义 Schema 和 Resolver
现在,我们来介绍如何定义 GraphQL 的 Schema 和 Resolver。
GraphQL 的 Schema 是一个类型定义,它描述了所有可查询和可变更的数据类型和操作。在 Apollo-Server-Express 中,我们可以使用 gql
函数来定义 Schema:
const { gql } = require('apollo-server-express'); const typeDefs = gql` type Query { hello: String } `;
在上面的代码中,我们定义了一个名为 Query 的类型,其中包含一个名为 hello 的字段,它返回一个字符串类型。
Resolver 是一个函数,它接收一个输入参数和上下文对象,并返回一个输出结果。在 Apollo-Server-Express 中,我们可以使用 resolvers
对象来定义 Resolver:
const resolvers = { Query: { hello: () => 'Hello world!' } };
在上面的代码中,我们定义了一个名为 hello 的 Resolver,它返回一个字符串类型的值。
查询和变更
现在,我们已经定义了 GraphQL 的 Schema 和 Resolver,我们可以使用 GraphQL API 来进行查询和变更。
查询
查询是一种只读操作,它用于获取数据。在 GraphQL 中,查询使用 Query
类型来定义。
例如,我们可以定义一个名为 getUser
的查询,它接收一个 ID 参数,并返回一个名为 User
的类型:
-- -------------------- ---- ------- ----- -------- - ---- ---- ----- - ----------- ----- ---- - ---- ---- - --- --- ----- ------- ------ ------- - -- ----- --------- - - ------ - -------- --- - -- -- -- - -- ------ ------ - --- ----- -------- ------ ------------------- -- - - --
在上面的代码中,我们定义了一个名为 getUser
的查询,它接收一个 ID 参数,并返回一个名为 User
的类型。在 Resolver 中,我们可以获取 ID 参数,并查询用户数据,最后返回一个包含用户信息的对象。
我们可以在 GraphQL Playground 中执行以下查询来获取用户信息:
{ getUser(id: "1") { id name email } }
查询结果应该是:
-- -------------------- ---- ------- - ------- - ---------- - ----- ---- ------- -------- -------- ------------------- - - -
变更
变更是一种写操作,它用于更新或删除数据。在 GraphQL 中,变更使用 Mutation
类型来定义。
例如,我们可以定义一个名为 createUser
的变更,它接收一个包含用户信息的输入参数,并返回一个名为 User
的类型:
-- -------------------- ---- ------- ----- -------- - ---- ---- ----- - --- - ---- -------- - ----------------- ------------ ----- - ----- --------- - ----- ------- ------ ------- - ---- ---- - --- --- ----- ------- ------ ------- - -- ----- --------- - - ------ - --- -- --------- - ----------- --- - ----- -- -- - -- ------ ------ - --- ---- -------- -- - - --
在上面的代码中,我们定义了一个名为 createUser
的变更,它接收一个名为 input
的输入参数,并返回一个名为 User
的类型。在 Resolver 中,我们可以获取输入参数,并创建用户数据,最后返回一个包含用户信息的对象。
我们可以在 GraphQL Playground 中执行以下变更来创建用户信息:
mutation { createUser(input: { name: "Bob", email: "bob@example.com" }) { id name email } }
变更结果应该是:
-- -------------------- ---- ------- - ------- - ------------- - ----- ---- ------- ------ -------- ----------------- - - -
结论
在本文中,我们介绍了如何使用 Apollo-Server-Express 为应用程序提供可扩展的 GraphQL API。我们从安装和配置开始,然后介绍了如何定义 GraphQL 的 Schema 和 Resolver,并演示了如何使用 GraphQL API 进行查询和变更。
GraphQL 提供了一种更加高效、强大和灵活的方式来设计和查询 API。使用 Apollo-Server-Express 可以使我们更加轻松地构建可扩展的 GraphQL API,并且可以与现有的 Express 应用程序集成。如果你正在寻找一种更加灵活和强大的 API 设计方式,那么 GraphQL 和 Apollo-Server-Express 绝对值得一试。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6762ae56856ee0c1d40879b4