[英]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.