簡體   English   中英

Apollo GraphQL 服務器中的別名字段

[英]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值,則相同的值將被別名為hitsbounces (這是有道理的,因為甚至只能返回一個總和值)。 如果我讓解析器在返回結果時使用別名作為字段名, hitsbounces都變成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
  }
}

必填字段可能會有所不同,只有namesum

您可以返回 object fe 的 arrays

{ stats: [
  { name:"hits", 
    sum:12345, 
    average: 456 }

別名可以在這里用來選擇不同的數據集 fe namesum for hits ,還加上average bounces

...更具聲明性?

PS。 沒有什么“使前端開發人員的集成變得復雜”。 結果是 json,可以在需要時在獲取(clinet 端)后進行轉換/轉換/適配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM