有没有办法避免在 Apollo GraphQL 中返回具有空值的键?

Posted

技术标签:

【中文标题】有没有办法避免在 Apollo GraphQL 中返回具有空值的键?【英文标题】:Is there a way to avoid returing keys with null values in Apollo GraphQL? 【发布时间】:2021-01-31 09:07:49 【问题描述】:

我在一个类型中有一个可以为空的属性:

type Person 
  job: String

还有一个查询:

query Persons() 
  persons() 
    job
  

无论我查询对象,我总是得到job 键,可以是字符串或空值。


  "job": null

但我需要的是 job 键仅在定义作业时出现在结果中,否则我希望完全跳过它。


我尝试返回nullundefined 并从数据中跳过密钥,但无论如何 Apollo 总是返回密钥。

【问题讨论】:

【参考方案1】:

之后删除字段要容易得多:

if (result.job === null) 
   delete result.job;

要使用 graphql 获得相同的结果,您必须将 Person 拆分为两种类型:PersonWithJobPersonWithoutJob。从persons 查询返回一个联合并将您的查询更改为:

query Persons() 
  persons() 
    ... on PersonWithJob 
      job
    
  

【讨论】:

我知道之后删除它会更容易,但是我有通用代码,它只是应该将 JSON 传递给需要密钥不存在或带有数据的外部系统。我只是不想在该代码中针对该特定情况进行任何特殊处理。

以上是关于有没有办法避免在 Apollo GraphQL 中返回具有空值的键?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 @apollo/react-hooks 访问多个 graphql 突变的选项

Apollo GraphQL,有没有办法在查询期间操作正在写入缓存的数据?

Apollo 中的缓存正在避免 GraphQL 解决多态关联

在 Apollo 中查找缺失的 GraphQL 解析器

Apollo Graphql:避免在重新获取期间加载指示器

使用 Apollo Federated GraphQL,有没有办法对来自外部实体的值进行排序/分页?