GraphQL java:当请求有未使用的变量时抛出异常

Posted

技术标签:

【中文标题】GraphQL java:当请求有未使用的变量时抛出异常【英文标题】:GraphQL java: Throwing exceptions when request has unused variables 【发布时间】:2019-03-20 22:23:33 【问题描述】:

假设我有一个带有变量映射和查询的请求负载。 graphql-java 是否有任何开箱即用的机制可用于检测有效负载中未使用的变量?

例如:

type Query  hello : String!  # this just resolves to "hello world"

当用户在请求负载中将foo: 42 作为variables 发送时,我想抛出一个错误(比如IllegalArgumentException)。

编辑:关于如何在没有任何开箱即用机制的情况下实现这一点的答案/cmets 也是受欢迎的。

【问题讨论】:

【参考方案1】:

在执行查询之前,使用Parser将查询解析为Document,这是查询的对象表示。查询中定义的变量可以通过查看其OperationDefinition来访问 --> VariableDefinition实例。然后将它们与请求负载中的变量进行比较。

作为奖励,由于 graphql-java 引擎将为每个查询执行解析和验证查询,这个过程可能会有些耗时,为了避免解析和验证两次,您可以使用PreparsedDocumentProvider

【讨论】:

以上是关于GraphQL java:当请求有未使用的变量时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

使用变量时的 GraphQL 错误请求

Python 请求使用变量向 graphql 发布查询

处理带有变量的 Graphql 查询时,Python 请求抛出 400

Graphql API 响应返回意外数据

记录 apollo-server GraphQL 查询和每个请求的变量

当这些变量被删除时,如何停止获取所需导出变量的 Apollo GraphQL 查询