[英]Aliasing fields in Apollo GraphQL Server
别名非常方便,并且在为特定解析器别名时效果很好。 例如:
{
admins: users(type:"admin"){
username
}
moderators: users(type:"moderators"){
moderators
}
}
我不确定如何处理字段本身的别名。 例如:
{
site_stats {
hits: sum(field: "hits")
bounces: sum(field: "bounces")
}
}
如果解析器返回任何sum
值,则相同的值将被别名为hits
和bounces
(这是有道理的,因为甚至只能返回一个总和值)。 如果我让解析器在返回结果时使用别名作为字段名, hits
和bounces
都变成null
。
我可以简单地将这些字段分解为单独的解析器,但这会使前端开发人员的集成变得复杂。 我们还将失去大量的效率优势,因为我可以将单个查询中所需的所有数据汇总到我们的数据源(我们正在使用 ElasticSearch)。
各位天才的任何帮助将不胜感激!
听起来您将所有逻辑都放在根级解析器( site_stats
)中,而不是为sum
字段提供解析器。 换句话说,如果您的解析器如下所示:
const resolvers = {
Query: {
site_stats: () => {
...
return { sum: someValue }
},
},
}
您应该改为执行以下操作:
const resolvers = {
Query: {
site_stats: () => {
return {} // empty object
},
},
SiteStats: {
sum: () => {
...
return someValue
},
},
}
这样,您就不会从父级传递 sum 的值并依赖于默认解析器 - 您在其解析器内显式地提供sum
的值。 由于将对每个别名分别调用sum
解析器,并且 arguments 特定于该别名,因此每个别名将相应地解析。
使用别名和单个字段的可用性非常有限。
您可以使用复杂的过滤器(输入参数),fe 要返回的键列表及其相关参数,fe
[{name:"hits", range:"month"},
{name:"bounces", range:"year"}]
带查询 - 预期结构
{
stats {
name
sum
average
}
}
必填字段可能会有所不同,只有name
和sum
。
您可以返回 object fe 的 arrays
{ stats: [
{ name:"hits",
sum:12345,
average: 456 }
别名可以在这里用来选择不同的数据集 fe name
和sum
for hits
,还加上average
bounces
。
...更具声明性?
PS。 没有什么“使前端开发人员的集成变得复杂”。 结果是 json,可以在需要时在获取(clinet 端)后进行转换/转换/适配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.