GraphQL - 架构

GraphQL架构是任何GraphQL服务器实现的核心.它描述了连接到它的客户端应用程序可用的功能.我们可以使用任何编程语言来创建GraphQL模式并围绕它构建一个接口.

GraphQL运行时定义了一个基于通用图形的模式,以发布它所代表的数据服务的功能.客户端应用程序可以在其功能内查询架构.这种方法将客户端与服务器分离,并允许它们独立发展和扩展.

在本章中,我们使用Apollo服务器来执行GraphQL查询. graphql-tools中的 makeExecutableSchema 函数可以帮助您绑定模式和解析器.

makeExecutableSchema函数语法

makeExecutableSchema 函数接受Object类型的单个参数{}.使用此函数的语法在'graphql-tools'下面给出 :

import { makeExecutableSchema } from 'graphql-tools';

const jsSchema = makeExecutableSchema({
   typeDefs,
   resolvers, // optional
   logger, // optional
   allowUndefinedInResolve = false, // optional
   resolverValidationOptions = {}, // optional
   directiveResolvers = null, // optional
   schemaDirectives = null,  // optional
   parseOptions = {},  // optional
   inheritResolversFromInterfaces = false  // optional
});	


Sr.No.参数&说明
1

typeDefs

这是必需的参数.它将GraphQL查询表示为UTF-8字符串.

2

Resolvers

这是一个可选参数(默认为空对象).这有处理查询的函数.

3

logger

这是一个可选参数,可用于将错误打印到服务器控制台.

4

parseOptions

这是一个可选参数,允许在将typeDefs指定为字符串时自定义解析.

5

allowUndefinedInResolve

这默认情况下为true.设置为false时,如果返回undefined,则会导致解析函数抛出错误.

6

resolverValidationOptions

这是一个可选参数,接受具有布尔属性的对象./p>

7

inheritResolversFromInterfaces

这是一个可选参数,接受一个布尔参数来检查解析器对象继承.

插图

让我们创建一个简单的应用程序来理解这个模式.这将创建一个架构,用于查询服务器中的学生列表.学生数据将存储在一个平面文件中,我们将使用一个名为 notarealdb 的节点模块伪造数据库并从平面文件中读取.

步骤1  : 下载并安装项目所需的依赖项

创建名为 schema-app 的文件夹.从终端将目录更改为schema-app.然后,按照环境设置章节中说明的步骤3到5完成下载和安装过程.

步骤2 : 创建模式

在项目文件夹中添加 schema.graphql 文件, schema-app 并添加以下代码 :

type Query {
   greeting:String
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

架构的根将是查询类型.该查询有两个字段 : 问候和分别返回String和学生列表的学生. Student被声明为Object类型,因为它包含多个字段. ID字段被声明为不可为空.

步骤3 : 创建解析器

在项目文件夹中创建文件 resolvers.js 并添加以下代码 :

const db = require('./db')
const Query = {
   greeting:() => {
      return "hello from  TutorialsPoint !!!"
   },
   students:() => db.students.list()
}

module.exports = {Query}

在这里问候和学生是处理查询的解析器. 学生解析器功能从数据访问层返回学生列表.要访问模块外部的解析器函数,必须使用 module.exports 导出Query对象.

步骤4 : 运行应用程序

创建server.js文件并参考环境设置章节中的步骤8.下一步是在终端中执行命令npm start.服务器将在9000端口上启动并运行.在这里,我们使用GraphiQL作为客户端来测试应用程序.打开浏览器并输入URL, http://localhost:9000/graphiql .

在编辑器中输入以下查询 :

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

查询将显示输出,如下所示 :

查询输出

注意 : 我们可以用RESTful API调用替换students.json来检索学生数据甚至是MySQL或MongoDB这样的真实数据库. GraphQL成为原始应用程序层的一个薄包装器,以提高性能.