GraphQL 查询:如果不为空,则仅包含字段
Posted
技术标签:
【中文标题】GraphQL 查询:如果不为空,则仅包含字段【英文标题】:GraphQL query: only include field if not null 【发布时间】:2016-07-26 21:39:09 【问题描述】:只有当字段不是null
时,GraphQL 是否有可能让客户端告诉服务器它想要一个字段?
给定查询
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 规范的情况下实现?
【问题讨论】:
只是想知道:这种行为的用例是什么? @AhmadFerdousBinAlam 我有一个带有默认(非空)值的 Kotlin 数据类,我不想在反序列化时被覆盖。 @Ahmad Ferdous,关于用例,如果服务器返回具有稀疏数据的项目数组怎么办?就像每个对象都有很多字段一样,其中只有少数实际上包含某些内容而不是 null。将这些字段从有效负载中排除以减小 api 响应的整体大小不是更好吗? 【参考方案1】:据我所知这是不可能的,有directives 像@skip 和@include。指令,但它们需要一个变量,我认为您可以与 graphql 团队合作,将指令扩展为仅包含不为空的字段。
【讨论】:
【参考方案2】:你可以在前端使用这个 ES6 语法:
Object.keys(data).forEach((key) => (data[key] == null) && delete data[key]);
【讨论】:
以上是关于GraphQL 查询:如果不为空,则仅包含字段的主要内容,如果未能解决你的问题,请参考以下文章