GraphQL是否允许用别名重复请求带不同参数的同一字段?
GraphQL别名是否支持同一字段带不同参数重复请求?
问题背景
给定如下GraphQL Schema:
type Query { user: User! } type User { height(measurementSystem: String!): String! }
请问是否可以执行如下查询:
query { user { heightInMeters: height(measurementSystem: "metric") heightInFeet: height(measurementSystem: "imperial") } }
并得到预期结果:
{ "data": { "user": { "heightInMeters": "1.8", "heightInFeet": "5'9" } } }
同时疑问:别名是否支持用不同别名请求带不同参数的同一字段?还是只能通过重复查询user的方式,比如:
query { userWithHeightInMeters: user { height(measurementSystem: "metric") } userWithHeightInFeet: user { height(measurementSystem: "imperial") } }
回答
结论
第一种带别名的查询方式完全符合GraphQL规范,是正确且更高效的做法。
详细说明
GraphQL的别名就是用来解决这种场景:在同一个父字段下,需要多次调用同一个子字段但传入不同参数。通过给每个调用指定别名,既能避免返回结果里的字段名冲突,又能清晰区分不同参数对应的返回值。
在你第一个查询里,user只会被后端获取一次,接着针对这个用户实例,分别调用两次height方法(分别传入metric和imperial参数),最终就能得到你想要的结果,完全合规。
至于第二种重复查询user的写法,虽然能得到结果,但会让后端两次执行user的查询逻辑(比如两次从数据库读取用户数据),属于冗余操作,完全没必要这么做。
内容的提问来源于stack exchange,提问作者Vladyslav Mozhvylo
相关产品推荐
相关产品推荐

