graphql - GraphQL 查询,具有动态字段
问题描述
我有这样的模式类型:
type Instance {
id: ID!
parentSeries: ID
tags: JSON
}
tags 字段是动态 JSON 类型 ( https://github.com/taion/graphql-type-json )。它也非常大。理想情况下,在客户端上,我可以使用我返回的标签指定哪些字段。GraphQL/Apollo 可以做到这一点吗?如果没有,你会建议什么?
解决方案
您可以path
在字段中包含一个参数,然后使用类似lodash
's的内容get
根据提供的路径转换 JSON 项:
const resolvers = {
Instance: {
tags: (instance, args) => {
return _.get(instance.tags, args.path)
},
},
}
您可以通过这种方式应用任意数量的任意转换来自定义返回的 JSON 对象。但是,由于您要返回一个标量,因此无法只为该字段提供一个选择集。
人们经常觉得他们需要使用 JSON 标量仅仅是因为他们使用的数据是一张地图。但是,可以轻松地将地图转换为数组,无需 JSON 标量即可轻松地在您的模式中表示。所以你可以把这个:
{
"foo": {
"propA": "A",
"propA": "B"
},
"bar": {
"propA": "A"
"propA": "B"
}
}
进入这个:
[
{
"tagName": "foo",
"propA": "A",
"propA": "B"
},
{
"tagName": "bar",
"propA": "A",
"propA": "B"
}
]
推荐阅读
- matlab - MATLAB 用户定义的类内存使用情况
- node.js - 在 NodeJS 项目中放置 Google Maps API 密钥的位置
- go - Golang r.URL.Query("x") 不返回带有特殊字符的完整值
- javascript - 我在 VScode 中遇到了 Sonarlint 扩展的问题,因为它无法识别 JS 代码
- javascript - 在某些设备(主要是 iPhone)中提交后表单不发送数据
- hdfs - 将 impala 表存储为文本文件时,是否可以告诉它在文本文件中保存列名?
- mysql - sqlMessage: '客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端',
- visual-studio-code - 用于显示活动页面的包含文件的 VSCode 插件
- azure - 每个数据库而不是每个服务器的 Azure SQL 数据库 DTU 计算器
- pyspark - 无法创建带有服务器问题的 Spark 会话