【问题标题】:Is it possible to return fields in GraphQL according to a condition?是否可以根据条件返回 GraphQL 中的字段?
【发布时间】:2018-08-23 07:50:14
【问题描述】:

使用 GraphQL,是否可以根据条件返回一些字段?例如:

[{
    name: "Foo",
    age: 38
}, 
{
    name: "Bar",
    age: 50
}]

我想始终返回 name,但只有在名称为 Foo 时才返回 age。结果是这样的:

[{
    name: "Foo",
    age: 38
}, 
{
    name: "Bar"
}]

【问题讨论】:

  • GraphQL 确实支持可选和必填字段,你能解释一下你的意思吗?
  • 我想使用条件检索某些字段的数据,例如:query { users { name age @include(if: ...) } } 我只想在 name 为时返回字段年龄“福”。返回应该是:[{ name: "Foo", age: 38 }, { name: "Bar" }]

标签: graphql apollo react-apollo


【解决方案1】:

在您的类型定义中,您可以设置类型的必需和非必需属性。例如,您的类型可能被定义为:

type Person {
  name: String!
  age: Int
}

您将按照以下方式定义查询扩展:

extend type Query {
  getPeople: [Person]
}

您可以在其中返回不同部分的逻辑是您的解析器代码。可能是这样的:

getPeople(obj, input, context) {
  // Make a request for the information from db or wherever it is stored
  // The sql or api request can do the filtering, if not it can be done after it's saved
  const people = context.Users.get.People();
  // Map over fields for expected return per user based on logic
  const filteredPeople = people.map(person => {
    if (person.name === "Foo") {
      return { name: person.name, age: person.age }
    } else {
      return { name: person.name };
    }
  });
  return filteredPeople;
};

简而言之,解析器允许您修改返回的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多