2017-07-19 61 views
1

我正在構建基於Graphene-Django的GraphQL API。我的一位正在構建將使用API​​的Angular客戶端的同事詢問是否有辦法在服務器端以某種方式存儲經常使用的查詢,以便可以通過名稱來調用它們?可以命名GraphQL查詢嗎?有點像存儲過程,可以重用嗎?

我還沒有遇到過這樣的功能,所以我不確定它是否可能。

僅供參考他正在使用Apollo客戶端,所以也許這樣的「命名」查詢嚴格來說是客戶端?這裏有一個頁面,他叫我去:http://dev.apollodata.com/angular2/cache-updates.html

羅伯特

回答

0

很好的問題!我認爲你正在尋找的東西叫做「持續查詢」。該GraphQL規格只有概括

  • 的架構類型系統
  • 的正式語言查詢
  • 如何驗證/對抗模式

除此之外,執行查詢時,它是由執行以進行特定的優化。有幾種方法可以執行持久查詢,而不同的方法可能對您的項目或多或少有幫助。

貯藏查詢作爲一個String

查詢可以很容易地存儲爲字符串,並約定是使用* .gql文件來做到這一點。許多編輯器/ IDE甚至會爲此提供語法高亮顯示。稍後使用它們,只需對它們進行編碼,即可完成設置!由於這些字符串是「已知的」,如果您選擇,您可以將服務器上的請求列入白名單。

const myQuery = ` 
    { 
    user { 
     firstName 
     lastName 
    } 
    } 
` 

const query = `www.myserver.com/query=${urlEncode(myQuery)}` 

持久化的查詢

對於更復雜的方法,你可以採取從項目中提取的查詢(無論是從字符串或使用構建工具),預運行它們,並把結果在DB中。這就是Facebook所做的。有很多工具可以幫助你解決這個問題,​​回購是一個開始尋找的好地方。

資源

Check out this blog for more info on Persisted Queries

+0

我看了看,也沒有找到,什麼需要Django的具體說明,在服務器上進行更改,以支持持久化的查詢在客戶端上。有什麼想法嗎? –

+0

看起來像你問這個問題在這裏: https://stackoverflow.com/questions/45224911/how-to-configure-graphene-django-to-work-with-persisted-queries – Baer

相關問題