zoukankan      html  css  js  c++  java
  • 创建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对象

  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/liuxiaokun/p/12676800.html
Copyright © 2011-2022 走看看