作者:浪子一品香_938 | 来源:互联网 | 2022-12-10 19:25
我有一个GraphQL服务器,它能够为指定的源(例如,传感器数据)提供时间序列数据.获取传感器数据的示例查询可能是:
query fetchData {
timeseriesData(sourceId: "source1") {
data {
time
value
}
}
}
在我的前端,我希望允许用户选择一个或多个源,并显示一个图表,每个图表都有一行.看起来这可以通过使用这样的查询:
query fetchData {
series1: timeseriesData(sourceId: "source1") {
data {
time
value
}
}
series2: timeseriesData(sourceId: "source2") {
data {
time
value
}
}
}
大多数GraphQL教程似乎都专注于静态查询(例如,唯一改变的是变量,而不是请求的实际形状) - 但在我的情况下,我需要查询本身是动态的(每个都有一个timeseriesData请求)我选择的ids).
我有以下约束:
修改服务器的架构不是一个选项(例如,我不能将ID数组传递给解析器)
我的查询是使用模板字符串指定的,例如gql` ...`
我不想手动将查询构建为字符串,因为这似乎是灾难的一个方法,并且意味着我失去了所有的工具优势(例如自动完成,语法突出显示,linting)
我正在使用的堆栈是:
阿波罗客户端(特别是阿波罗角)
角
打字稿
graphql-tag(用于定义查询)
理想情况下,我想要做的是有一些方法将两个查询合并为一个,这样我就可以按照第一个例子定义它们,然后将它们连接在一个抽象层中,这样我得到一个像第二个例子一样的查询通过电汇发送.
但是我不确定如何实现这一点,因为graphql-tag正在将查询解析为AST,而我正在努力理解以这种方式操作查询是否可行.
有哪些技术可以生成像这样的动态查询,其中查询的形状不是预先知道的?