GraphQL 变量组合验证

Posted

技术标签:

【中文标题】GraphQL 变量组合验证【英文标题】:GraphQL variable combination validation 【发布时间】:2021-05-20 04:51:21 【问题描述】:

想象一下以下(简化的)GraphQL 模式:

type User 
  username: String
  email: String


type Query 
  user(username: String, email: String): User

如果我只想通过提供username 来允许查询user,我当然会将其更改为user(username: String!),使username 需要使用感叹号。电子邮件也一样。

是否有可能有一个 GraphQL 原生 解决方案,在其中我验证两个输入参数中是否存在一个(逻辑 XOR)或至少一个(逻辑 OR)? 当然,我可以在查询解析器中手动执行此操作,但是像在 Apollo GraphQL 中使用的 @constraint 指令在跨变量传播时会很好。

【问题讨论】:

【参考方案1】:

直接...不可能

在解析器上检查字段是否存在 [在 args 内]; 使用@constraint检查每个字段形状;

间接

你可以尝试使用union的输入类型:

.

type UserNameInput 
  username: String!

type UserEmailInput 
  email: String!

type UserInput = UserNameInput | UserEmailInput

type Query 
  user(input: UserInput): User

【讨论】:

以上是关于GraphQL 变量组合验证的主要内容,如果未能解决你的问题,请参考以下文章

来自角度对象的Graphql输入对象

GraphQL 类型组合

使用 Mock Service Worker 时如何对 graphql 查询变量进行断言?

在 GatsbyJS/GraphQL 中组合页面查询

graphql_devise 用于 Rails/Graphql/Apollo/React 中的身份验证。 “字段需要身份验证”错误

Apollo GraphQL技术栈概览:如何将所有的功能组合起来