GraphQL查询:如果不为空,则仅包含字段

GraphQL查询:如果不为空,则仅包含字段,graphql,Graphql,GraphQL是否有可能让客户端告诉服务器,只有当某个字段不是null时,它才需要该字段 给定查询 query HeroAndFriends { hero { name friends { name } } } 然后,响应应该如下所示 { "data": { "hero": { "friends": [ { "name": "Luke Skywalker" },

GraphQL是否有可能让客户端告诉服务器,只有当某个字段不是
null
时,它才需要该字段

给定查询

query HeroAndFriends {
  hero {
    name
    friends {
      name
    }
  }
}
然后,响应应该如下所示

{
  "data": {
    "hero": {
      "friends": [
        {
          "name": "Luke Skywalker"
        },
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        }
      ]
    }
  }
}
而不是

{
  "data": {
    "hero": {
      "name": null,
      "friends": [
        {
          "name": "Luke Skywalker"
        },
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        }
      ]
    }
  }
}

这在不违反GraphQL规范的情况下是可能的吗?

据我所知,这是不可能的,有@skip和@include。指令但它们需要一个变量,我认为您可以与graphql团队合作,将指令扩展为仅包括字段(如果字段不为null)。

您可以在前端使用以下ES6语法:

Object.keys(data).forEach((key) => (data[key] == null) && delete data[key]);

只是想知道:这种行为的用例是什么?@AhmadFerdousBinAlam我有一个Kotlin数据类,它具有默认(非空)值,在反序列化时我不想被覆盖。@Ahmad Ferdous,关于用例,如果服务器返回的数据稀疏的项数组怎么办?就像每个对象都有许多字段一样,只有少数字段实际包含某些内容而不是null。将这些字段从有效负载中排除以减小api响应的总体大小不是更好吗?