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 变量组合验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mock Service Worker 时如何对 graphql 查询变量进行断言?
graphql_devise 用于 Rails/Graphql/Apollo/React 中的身份验证。 “字段需要身份验证”错误