• 创建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对象

  • 相关阅读:
    20170822xlVBA ExportCellPhone
    【C/C++】C++ warning: control reaches end of non-void function return
    【C/C++】例题3-5 生成元/算法竞赛入门经典/数组与字符串
    对象类型的参数传递
    对象的创建和使用
    方法的重载
    构造方法
    方法
    修饰符
    类的一般形式
  • 原文地址:https://www.cnblogs.com/liuxiaokun/p/12676800.html
Copyright © 2020-2023  润新知