GraphQL 是如今最受欢迎的 API 查询语言之一,它的优势在于能够更好地管理数据和查询操作,同时提高 API 的效率。然而,GraphQL 查询可能具有复杂的数据结构,需要进行数据验证和过滤,以确保返回的数据符合预期格式和类型。
在 Node.js 中,我们可以使用各种 GraphQL 库来构建服务器端应用程序,而在这个过程中,数据验证是无法避免的,因此我们需掌握一些最简便的方法来保证数据的完整性和正确性。
数据验证的方法
在 Node.js 中,我们可以使用许多库来处理数据验证,包括 Joi, Validate.js 和 Ajv 等。这些库可以对数据对象进行验证,与 GraphQL 数据验证的过程相似。
但是,使用这些库进行数据验证和GraphQL数据验证的方法有很多不同之处。在下面的示例中,我们将使用 GraphQL schema 和 graphql-yoga 库来构建简单的 GraphQL 应用程序,并进行数据验证。
首先,在 package.json 文件中添加以下代码:
"dependencies": { "graphql-yoga": "1.18.3" }
然后,在 index.js 文件中编写以下代码:
-- -------------------- ---- ------- ----- - ------------- - - ------------------------ -- -------- - --------- ----- -------- - - ---- ----- - -------- ----- ---- - ---- ---- - --- --- ------ ------- -------- ------- ---------- ------- - ----- --------- - ------ ------- -------- ------- - ---- -------- - ----------------- ------------ ---- - -- ----- --------- - - ------ - ----- --- - -- -- -- - -- -------------- -- -- --------- - ----------- --- - ----- -- -- - -- -- ----- ------ -- ------------------- -- -- -- -- -- ------- ------ ----- ------ - --- --------------- --------- --------- --- --------------- -- ------------------- -- ------- -- ------------------
以上代码中,我们定义了一个查询和一个变异。查询返回指定 id 的 Post 对象,它具有 id、title、content 和 createdAt 属性。变异使用 PostInput 对象作为参数并返回新创建的帖子。
验证输入数据的类型和格式
接下来,我们需要在变异中添加数据验证逻辑,以确保输入的数据符合预期格式和类型。这可以使用 GraphQL 中的 Argument Validation 来完成。
为此,请在变异定义中添加 typeDefs,主要用于验证输入参数类型的定义,以及 resolver 中的参数 $args 的定义:
-- -------------------- ---- ------- ----- -------- - - ---- ----- - -------- ----- ---- - ---- ---- - --- --- ------ ------- -------- ------- ---------- ------- - ----- --------- - ------ ------- -------- ------- - ---- -------- - ----------------- ------------ ---- - -- ----- --------- - - ------ - ----- --- - -- -- -- - -- -------------- -- -- --------- - ----------- --- - ----- -- ---- ----- -- - -- -------- ----- ---------- - - ------ - ----- --------- --------- ---- -- -------- - ----- --------- --------- ---- -- -- -- -- -------- ------ ----- ------ - --------------- ------------ -- ------- -- -------------- - ----- --- ------------------------- - -- --------------------------- ----- ---- - - --- -- ----- -- --- --------- ---------- --- --------------------- -- ------ ----- -- -- --
验证返回的数据的格式和类型
最后,我们需要验证查询和变异返回的数据符合预期的格式和类型。这可以使用 GraphQL 中的 Schema Validation 来完成。
要验证返回的数据,我们可以使用类型定义和 resolver 中的实际返回值的类型定义。
-- -------------------- ---- ------- ----- -------- - - ---- ----- - -------- ----- ---- - ---- ---- - --- --- ------ ------- -------- ------- ---------- ------- - ----- --------- - ------ ------- -------- ------- - ---- -------- - ----------------- ------------ ---- - -- ----- --------- - - ------ - ----- --- - -- -- -- - -- -------------------------- ----- -- ----------------- ----- -------- - - --- ------ ------ -------- ---- ----------- -------- ------ ---- --------- --- -------- ------- ----- ---------- --- --------------------- -- ------ --------- -- -- --------- - ----------- --- - ----- -- ---- ----- -- - ----- ---------- - - ------ - ----- --------- --------- ---- -- -------- - ----- --------- --------- ---- -- -- ----- ------ - --------------- ------------ -- ------- -- -------------- - ----- --- ------------------------- - ----- ---- - - --- -- ----- -- --- --------- ---------- --- --------------------- -- ------ ----- -- -- -- ----- ------ - --- --------------- --------- --------- --- -- -- ------ ---------- ----- --------------- - ---------------- ----- ------------------ - -------------------------------- ----- ------ - ---------------------- --------- --------- --- ------------------------------ ------ ----- -------- ----- -- - ------ ------------------------ ----- -------- ------ --- ----------- ---- ------------- ------- ------- --------- ----- -- -- --------------- -- ------------------- -- ------- -- ------------------
以上代码中,我们首先定义了一个假 Post 对象用于查询。然后我们添加了一个 Schema validation。在这个例子中,我们只添加了一个简单的 validation rule 限制 GraphQL 查询的最大深度。你可以根据自己的应用需要添加更多的 validationRule,比如对返回数据的大小进行限制。
结论
在这篇文章中,我们学习了如何在 Node.js 中使用 GraphQL 进行数据验证。我们采用了 graphql-yoga 库来构建应用程序,并学习了关于解析器、类型定义和变异的一些基本概念。最后,我们使用 Schema Validation 完成数据验证。通过这些知识,我们可以保证达到预期的结果,并使数据更加准确。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67483ec093696b0268ec9ee4