将多个参数传递给 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突变?