引言
GraphQL 是一种通过 API 构建应用程序的查询语言。它允许客户端定义所需的数据形状和其要求,从而使得应用程序性能得到了提升。尽管 GraphQL 已经为开发人员提供了便利,但是在开发过程中,数据校验仍然是一个重要的问题。
在本文中,我们将介绍 GraphQL 中的数据校验技术。我们将探讨这些技术的深度和学习,以及指导如何将其应用到实际项目中。并且,我们将提供一些示例代码,以帮助您更好地理解这些技术。
GraphQL 简介
GraphQL 是一种由 Facebook 发起的 API 查询语言,它可以用来连接不同的数据源。与 RESTful API 不同,GraphQL 使用单一端点来提供对所需数据的查询、修改和订阅。GraphQL 的目标是提供一个灵活的、易于使用和协作机制的 API。
在 GraphQL 查询中,您可以指定要请求和返回的数据类型及其要求的属性。这使得数据请求更加精确,并减少了不必要的网络请求。
以下是一个 GraphQL 查询示例:
-- -------------------- ---- ------- ----- - -------- ---- - ---- --- ------- - ---- ------ - - -
在此查询中,我们向服务器请求来自一个名为 user
的对象。我们要求返回其 name
、age
和 address
属性,而 address
属性又包含 city
和 street
。
GraphQL 的数据校验问题
GraphQL 在数据传输时确实提供了一些优势,但这并不意味着数据传输是100%安全的。在 GraphQL 应用中,传输的数据会相当复杂,工作量大的事也在所难免。它们可能来自不同的源或分布在不同的数据库中。除此之外还有一些常见的校验问题:
- 缺失和重复字段: 在传输数据时,缺少或重复字段经常会发生,并且这样的数据会导致错误的结果。
- 字段类型错误: GraphQL 定义了特定的标量类型,但是由于约定或编程错误,有时候这些类型会转换为其他类型。例如,将
Boolean
类型转换为String
类型可能导致错误的结果。 - 不允许的字段组合: GraphQL 的强大功能可能导致数据的组合结果非常复杂。有时,一些属性的组合会导致数据的无意义和不合理。这可能会导致与期望不一致的结果。
为了保证数据的正确性和减少错误,我们需要对 GraphQL 中传输的数据执行校验。
GraphQL 数据校验的方法
让我们来看看基于 GraphQL 的数据校验技术,这些方法旨在发现并减少用户在使用 GraphQL 时遇到的错误。
使用 GraphQL Schema
GraphQL Schema 是确定 GraphQL API 所支持数据类型的方式。它用于定义整个 GraphQL API 中可用的对象类型、枚举类型、接口类型、标量类型等。我们可以使用 Schema 对传输的数据类型进行约束,以减少错误的发生。
以下是示例代码:
-- -------------------- ---- ------- ---- ----- - -------- ----- ---- - ---- ---- - --- --- ----- ------- ---- ---- -------- -------- - ---- ------- - ----- ------- ------- ------- -
上述代码定义了三个数据类型:Query
、User
和 Address
。在 User
类型的定义中,我们定义了 name
、age
和 address
的类型,并且它们的值也必须存在。
在您的业务逻辑中,您可以根据上述 schema 来编写代码。在编写过程中,如果您尝试将不符合 schema 定义的数据传输到客户端或服务器,则 GraphQL 会拒绝该请求。
使用预设的规则
GraphQL 规则可能会使用复杂的算法来检查 GraphQL 查询的结构。使用预设的规则,我们可以保留 GraphQL API 的正确性,并且减少数据传输的错误。
以下是一些 GraphQL 规则:
- NoUnusedFragments: 确保所有片段都在查询中使用
- NoFragmentCycles: 检查是否存在循环片段定义
- UniqueArgumentNames: 检查是否为同一查询指定了相同名称的参数等等。
有了这些规则,我们可以获得更好的错误消息,并帮助开发人员更快地发现问题。例如,如果在查询中使用了无用的片段,则 GraphQL 会返回“未使用的片段”错误,如下所示:
-- -------------------- ---- ------- ----- ------------- ---- - ----------- ---- - --- ------------- - - -------- ------------- -- ------- - ----- -
在上面的代码中,我们定义了一个名为 ProductFields
的片段,但是该片段并未在查询中使用。使用预设的规则确保 NoUnusedFragments
规则将会在这种情况下发现该错误。
数据检查中间件
GraphQL 中间件允许我们使用数据校验工具来对 GraphQL 查询的输入数据进行检查。通过这种方式,我们可以在数据传输过程中使用各种校验策略。
以下是一些 GraphQL 中间件:
- Apollo Shield: 用于验证输入数据并运行规则,以保护您的 GraphQL API。它允许我们在接受请求之前对输入数据进行校验。
- GraphQL Depth Limit: 针对潜在的查询攻击进行防御,该攻击旨在使用大量嵌套的查询和片段来消耗服务器资源。
- GraphQL Input Type Validator: 用于验证 GraphQL 输入数据的标量类型和扩展类型的结构。
- GraphQL Field Sentry: 用于执行 GraphQL API 查询的深度分析,以检测潜在的安全漏洞。
结论
通过了解基于 GraphQL 的数据校验技术,我们可以发现将数据校验集成到 GraphQL 应用中是非常重要的。GraphQL Schema、预设的规则和数据检查中间件可以帮助减少错误,从而提供正确的数据传输。使用这些技术,我们可以确保应用程序在使用 GraphQL API 时更加可靠且稳定。
最后,我们推荐在您的业务逻辑中使用这些技术,以确保 GraphQL API 的正确性和可靠性。我们也希望以上信息能够帮助您掌握如何使用 GraphQL 的数据校验技术,以提高应用的稳定性和可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6715d3bead1e889fe2191763