本文主要介绍如何使用 npm 包 @olliebhx/graphql-tools 来编写 GraphQL API 服务。@olliebhx/graphql-tools 是一个将 graphql schema 和 resolver 合并到一起的工具,可以快速构建 GraphQL API 服务。
安装 @olliebhx/graphql-tools
首先,我们需要在项目中安装 @olliebhx/graphql-tools。可以使用 npm 或者 yarn 安装。
npm install @olliebhx/graphql-tools
yarn add @olliebhx/graphql-tools
构建 GraphQL schema
使用 @olliebhx/graphql-tools 构建 GraphQL schema 主要分为以下两个步骤:
- 定义 typeDefs
- 定义 resolvers
定义 typeDefs
typeDefs 是描述数据结构的 GraphQL 语言定义。可以使用 typeDefs 定义类型、字段、输入、查询、变量、枚举等。
const { gql } = require('apollo-server'); const typeDefs = gql` type Query { hello: String } `;
在上面的例子中,定义了一个 Query 类型,其中包含一个 hello 字段,这个字段的类型是 String。
定义 resolvers
resolvers 定义了如何解析查询和修改请求。
const resolvers = { Query: { hello: () => 'Hello world!', }, };
在上面的例子中,定义了一个 Query 的解析器,当查询 hello 字段时,返回 "Hello world!"。
合并 schema 和 resolvers
使用 makeExecutableSchema 函数将 typeDefs 和 resolvers 合并成一个 schema。
const { makeExecutableSchema } = require('@olliebhx/graphql-tools'); const schema = makeExecutableSchema({ typeDefs, resolvers, });
现在,我们就得到了一个完整的 GraphQL schema。
创建 Apollo Server
最后,我们使用 Apollo Server 来启动 GraphQL 服务。
const { ApolloServer } = require('apollo-server'); const server = new ApolloServer({ schema }); server.listen().then(({ url }) => { console.log(`Server ready at ${url}`); });
在上面的例子中,使用 ApolloServer 类创建了一个 HTTP 服务器,监听一个随机的端口,并打印服务器 URL。
示例代码
下面是一个完整的示例代码,用于构建一个简单的 GraphQL API 服务。
-- -------------------- ---- ------- ----- - --- - - ------------------------- ----- - -------------------- - - ----------------------------------- ----- - ------------ - - ------------------------- ----- -------- - ---- ---- ----- - ------ ------ - -- ----- --------- - - ------ - ------ -- -- ------ -------- -- -- ----- ------ - ---------------------- --------- ---------- --- ----- ------ - --- -------------- ------ --- ----------------------- --- -- -- - ------------------- ----- -- --------- ---
结束语
本文介绍了如何使用 npm 包 @olliebhx/graphql-tools 来构建 GraphQL API 服务,并给出了详细的使用说明和示例代码。@olliebhx/graphql-tools 是一个非常实用的工具,在构建 GraphQL API 服务时可以帮助我们快速合并 schema 和 resolvers。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600572c881e8991b448e8f3b