将多个参数传递给 GraphQL 查询

Posted

技术标签:

【中文标题】将多个参数传递给 GraphQL 查询【英文标题】:Passing Multiple Arguments to GraphQL Query 【发布时间】:2018-03-08 20:00:22 【问题描述】:

第一件事

感谢这可能是一个有点愚蠢的问题,但我正在使用来自 RDF/关联数据世界的 GraphQL,并且在弄清楚如何返回集合时遇到了很多麻烦。本质上,我想要一些我可以选择的东西,比如说Characters 的列表(使用 GraphQL 文档中的示例)通过他们的id。在 SPARQL 中,我将使用 VALUES 子句然后进行绑定,例如:

VALUES  <http://uri/id-1> <http://uri/id-2> <http://uri/id-3> 

我假设这样的东西就是我想要的(伪代码)


  human(id: ["1", "2", "3", "4", "5"]) 
    name
    height
  

Aliases 有点做我想做的事,但我不想提前或手动指定不同的命名返回值是什么 - 我想在我的代码中说传递一个 ID 列表:

[1 2 3 4 5]

...并且有一个查询可以接受该 ID 数组并根据上面的伪查询返回一个可预测的非标量形状。

第二件事

我还假设实际上不可能将查询解析为Human[Human] - 它必须是其中一个?如果是这样也没什么大不了的,我会满足于后者……但我想我现在对此感到很困惑。

【问题讨论】:

例如,我是不是想错了,我应该定义一个Slice 类型,我可以在其中定义多个参数来将假设的列表分割成范围?即便如此,对于处理资源列表来说,这种感觉并不理想。 理想情况下,我想避免像"[1 2 3 4 5]" 这样的字符串输入,所以我不必担心解析,尽管我认为这是最后的选择。 【参考方案1】:

首先,您需要通过添加“人类”来扩展查询:

extend type Query 
  humans(listId: [String!]): [Human!]
  human(id: ObjID!): Human

第二 - 为它写一个解析器。

Query: 
  humans(root, listId,  Human ) 
    return Human.fillAllByListId(listId);
  ,
  ...
,

可以按如下方式传递 ID 列表:

【讨论】:

【参考方案2】:

Whit Hasura 你可以这样做(IDK 如果只在 Hasura 上工作)

query getConfigurationList($ids: [String!]!) 
    configuration (where: id:_in: $ids)
        id
        value
    

这里是docs

【讨论】:

【参考方案3】:

您可以使用GraphQL Aliases


    first: human(id: "1") 
        name
        height
    
    second: human(id: "2") 
        name
        height
    

【讨论】:

以上是关于将多个参数传递给 GraphQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

将枚举类型作为参数传递给 GraphQL 查询 - Quarkus

GraphQl 将查询参数传递给子类型

如何将具有多个对象的状态数组作为参数传递给graphql突变?

如何将参数传递给 GraphQL 中的子属性

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?

GraphQL 将参数传递给子解析