如何正确声明不带参数的 GraphQL 查询。

Posted

技术标签:

【中文标题】如何正确声明不带参数的 GraphQL 查询。【英文标题】:How to correctly declare a GraphQL query without parameters. 【发布时间】:2019-03-17 02:56:12 【问题描述】:

我正在使用 vs code + graphql-cli 来验证和检查模式。在以下声明中(在 graphql 模式文件中):

type Query 
  users(): Int

上面的 users 声明被标记为 en 错误,但服务器不会产生任何问题(或警告) - 它只是 vs 代码和 graphql lint 将其报告为错误:

2:9 Syntax Error: Expected Name, found )  undefined

如果我在查询中添加一个参数,例如:

type Query 
  users(n: Int): Int

那么vs code或者graphql-cli都没有报问题。 如何正确声明不带参数的 graphql 查询。

【问题讨论】:

尽管n 参数是可选的,但存在一个导致fail to parse users() as a valid query 的GraphQL 错误。如果所有参数都丢失,你必须写users 【参考方案1】:

您在架构中指定的查询的行为与特定类型上的任何其他字段一样(主要区别在于它们的类型与特定操作相关联)。如果您不想为特定字段声明任何参数,则只需完全省略括号即可。查询和突变也是如此:

type Query 
  users: Int

来自规范:

从概念上讲,字段是返回值的函数,并且偶尔会接受改变其行为的参数。这些参数通常直接映射到 GraphQL 服务器实现中的函数参数。

所以值得指出的是,任何类型的字段都可以有参数。例如,查询可能如下所示:

query UsersQuery 
  users 
    name
    posts (onlyNew: true) 
      title
    
  

【讨论】:

query with one optional parameter 怎么样?应该如何定义以使users(n: 100)users() 都有效? 参数默认可以为空。后者永远不会有效,因为它是无效的语法。如果不传入任何参数,则需要省略括号。

以上是关于如何正确声明不带参数的 GraphQL 查询。的主要内容,如果未能解决你的问题,请参考以下文章

Qt中QObject中的parent参数

.Net 7的带参和不带参的Main入口

在oracle中创建带参存储过程,传进去的参数可以为空么?在存储过程中要如何判断传进来的值是不是为空。

为啥 graphql 不接受我在查询中传递的参数?

查询中对象的 GraphQL 参数

当我从 Angular 传递 graphql 查询时,为啥 GraphQL 控制器中的参数查询为空?