【问题标题】:Passing Multiple Arguments to GraphQL Query将多个参数传递给 GraphQL 查询
【发布时间】: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]" 这样的字符串输入,所以我不必担心解析,尽管我认为这是最后的选择。

标签: sparql graphql


【解决方案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
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-09-27
        • 2023-01-26
        • 2017-05-28
        • 2020-12-31
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-02
        相关资源
        最近更新 更多