GraphQL 模式是任何 GraphQL 服务器实现的核心。它描述了连接到它的客户端应用程序可用的功能。我们可以使用任何编程语言来创建 GraphQL 模式并围绕它构建接口。
在本章中,无涯教程使用Apollo服务器执行GraphQL查询。 graphql-tools中的 makeExecutableSchema 函数可帮助您绑定架构和解析器。
makeExecutableSchema 函数采用对象类型的单个参数{}。下面给出了使用此函数的语法-
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. | Parameter & Remark |
---|---|
1 | typeDefs 这是必需的参数。它以utf-8字符串的形式表示GraphQL查询。 |
2 | Resolvers 这是一个可选参数(默认为空对象)。它具有处理查询的函数。 |
3 | logger 这是一个可选参数,可用于将错误打印到服务器控制台。 |
4 | parseOptions 这是一个可选参数,当将typeDefs指定为字符串时,允许自定义解析。 链接:https://www.learnfk.comhttps://www.learnfk.com/graphql/graphql-schema.html 来源:LearnFk无涯教程网 |
5 | allowUndefinedInResolve 默认情况下是这样。设置为false时,如果解析函数返回未定义,则会导致它们引发错误。 |
6 | resolverValidationOptions 这是一个可选参数,并且接受具有布尔属性的对象。 |
7 | inheritResolversFromInterfaces 这是一个可选参数,并且接受布尔参数来检查解析器对象的继承。 |
让无涯教程创建一个简单的应用程序来了解此架构(Schema),这将创建一个用于从服务器查询学生列表。学生数据将存储在文件中,将使用名为 notarealdb 的节点模块来伪造数据库并从文件中读取数据。
创建一个名为 schema-app 的文件夹。从终端将目录更改为schema-app。然后按照"Environment Setup"一章中说明的步骤3至5来完成下载和安装过程。
在项目文件夹 schema-app 中添加 schema.graphql 文件,并添加以下代码-
type Query { greeting:String students:[Student] } type Student { id:ID! firstName:String lastName:String password:String collegeId:String }
该查询具有两个字段-Greeting和Students,分别返回String和[Student]学生列表,学生被声明为对象类型,它包含多个字段, ID字段声明为不可为空。
在项目文件夹中创建文件 resolvers.js 并添加以下代码-
const db=require('./db') const Query={ greeting:() => { return "hello from LearnFk !!!" }, students:() => db.students.list() } module.exports={Query}
学生解析器函数返回数据访问层中的学生列表。要访问模块外部的解析器函数,必须使用 module.exports 导出查询对象。
创建一个server.js文件,并参考“环境设置”一章中的步骤8,下一步是在终端中执行命令npm start。服务器将启动并在9000端口上运行。在这里,无涯教程使用GraphiQL作为客户端来测试应用程序。打开浏览器,然后输入URL http://localhost:9000/graphiql 。
在编辑器中键入以下查询-
{ greeting students { id firstName lastName } }
查询将显示输出,如下所示-
注意-无涯教程可以使用RESTful API调用来替换students.json,以检索学生数据,甚至可以检索像MySQL或MongoDB这样的真实数据库。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)