2017-07-20 26 views

回答

1

持久化的查詢是不是和GraphQL規範的一部分,因此,可以在各種各樣的方式來實現。這裏有一個如何想這樣做,你的服務器上的幾個例子:

提取查詢

在編寫這本書的時候,你可以提取與繼電器現代的阿波羅客戶端靜態查詢,和別的。它們都以類似的方式工作,所以我將以Apollo PersistGraphQL爲例。在你的版本中,你需要在你的src目錄上運行persistgraphql命令來提取你的靜態查詢。該命令的結果將是一個充滿查詢的JSON文件,字符串和一個數字作爲值。

{ 
    " 
    { 
    author { 
     firstName 
     lastName 
    } 
    } 
    ": 9, 
    " 
    query otherQuery { 
    person { 
     firstName 
     lastName 
    } 
    } 
    ": 10 
} 

使用提取查詢

從這裏,你有幾種選擇。一旦您的服務器知道所有可能的查詢,它可以提供JSON文件中提供的值的接口,也可以將其知道的查詢列入白名單。如果您的服務器僅提供了一個接口(上面示例中的myserver/api/9,myserver/api/10),則需要確保您的客戶端應用程序通過使用相同的JSON文件將其查詢映射到那些同意的ID。或者,您可以使用該文件來防止在不修改客戶端的情況下執行意外的查詢。

如何專門設置服務器以使用此JSON文件取決於您。有些人會預先執行一組已知的查詢,並將它們放入像Redis這樣的快速數據存儲中。有些人嚴格使用它來防止未經授權的查詢。就Django-Graphene如何實現這一點而言,我沒有意識到現成的解決方案,但是消費類似上面提到的關鍵/值存儲應該爲您的團隊提供一堆好的選項。

+0

謝謝你的迴應。你的解釋揭示了更多,但我仍然不知道如何將你描述的內容添加到服務器。請記住,我對石墨烯很新。根據你寫的內容,我只是搜索:石墨django白名單查詢 但它沒有透露任何有用的。 我希望別人會回答這個方程的服務器端部分的線索。 –