创建GraphQL API

创建GraphQL API

  • 语言、环境、工具包 GraphQL.js + express-graphql + ApolloServer

GraphQL规范发布的时候,它就致力于对查询语言和类型系统的提供解释。同时有意识地模糊了服务器实现方面的细节,从而让各种语言的开发者都能将其应用到他们的项目中。 不过我们还是使用最常用的JavaScript Facebook团队开发了一个JavaScript库,名为GraphQL.js。与此同时,他们还发布了express-graphql,可以帮助你使用Express简单地创建GraphQL服务器,这是第一个帮助开发人员实现这种服务的库

选择使用ApolloServer

Apollo Server的设置相当简单,而且提供了一系列可用于生产的功能,包括订阅、文件上传、用于快速连接现有服务的数据源API,以及开箱即用的Apollo Engine。当然,它也包括了GraphQL Playground,方便开发者在浏览器内直接编写查询字段。

项目设置

  • 新建项目文件夹

  • 生成新的项目,通过终端或cmd打开该文件夹,然后输入npm init-y命令来生成一个新的npm项目

  • 安装项目依赖:apollo-server和graphql及nodemon

image

nodemon将观察文件的更改,并在我们做出更改时重启服务器。让我们将nodemon的命令添加到package.json中。

image

每次运行npm start时,index.js文件都将运行,nodemon将观察所有带有.js、.json或.graphql扩展名文件的更改。当然,我们还要在根目录下创建一个index.js文件。确保package.json中的主文件指向index.js。

image

解析器

schema描述的是数据需求,它并不做获取数据的工作。 解析器是一个函数,它依照特定字段返回数据。解析器函数返回schema指定的类型和格式的数据。解析器可以是异步的,它可以从REST API、数据库或其他任何服务获取或更新数据。

image

typeDefs变量是我们定义schema的地方。它仅仅是个字符串。每当我们创建像totalPhotos这样的查询时,它应该由同名的解析器函数提供支持。类型定义描述了字段应该返回的类型 值得注意的是,解析器必须和schema中的对象具有相同的typename(类名)。totalPhotos字段是查询对象的一部分。该字段的解析器也必须是Query(查询)对象的一部分 我们已经为根查询创建了初始类型定义。同时我们还创建了第一个支持totalPhotos查询字段的解析器。要创建schema并对schema进行查询,我们将使用Apollo服务器:

image

解析器是GraphQL实现的关键。每个字段必须有一个相应的解析器函数。解析器必须遵循schema的规则。它必须与schema中定义的字段具有相同的名称,并且必须返回schema定义的数据类型。以上这些都是必须遵守的规则。

  • 根解析器

GraphQL API在Query(查询)、Mutation(变更)和Subscription(订阅)上都有其根类型。这些类型位于最顶层,代表了API所有可能的入口点

让我们为Mutation创建根类型。Mutation字段为postPhoto,它将name和description作为String类型的参数。发送变更项时,它必须返回一个布尔值:

image

创建postPhoto变更项后,我们需要在resolvers对象中添加相应的解析器:

image

  • 类型解析器 当执行GraphQL的查询、变更或订阅时,它将返回和查询相同格式的结果,前面我们已经看到了解析器如何返回标量类型值,比如整数、字符串和布尔值,其实解析器也可以返回对象。

image

发送给解析器的第一个参数总是parent对象

posted on 2020-04-10 22:54  码上翻身  阅读(609)  评论(0编辑  收藏  举报

导航