[譯] 怎樣使用GraphQL - 進階 - 5.常見問題

英文原版地址:https://www.howtographql.com/...git

GraphQL是數據庫技術嗎?

不是。GraphQL常常與數據庫技術混淆。這是一個誤解,GraphQL是API的查詢語言,而不是數據庫。在這個意義上,它是數據庫無關的,能夠用於任何類型的數據庫,甚至根本沒有數據庫。github

GraphQL僅適用於React / Javascript開發人員?

GraphQL是一種API技術,所以能夠在須要API的任何上下文中使用。web

在後端,GraphQL服務器能夠用任何可用於構建Web服務器的編程語言實現。在JavaScript以外,Ruby,Python,Scala,Java,Clojure,Go和.NET都有流行的實現能夠參考。數據庫

因爲GraphQL API一般經過HTTP進行操做,任何能夠發起HTTP請求的客戶端均可以從GraphQL服務器查詢數據。編程

注意:GraphQL其實是傳輸層不可知的,因此您能夠選擇其餘協議,比HTTP來實現您的服務器。redux

如何作服務器端緩存?

GraphQL的一個常見問題,特別是與REST進行比較時,難以維護服務器端緩存。使用REST,能夠輕鬆地爲每一個端點緩存數據,由於它確保數據的結構不會改變。後端

另外一方面,使用GraphQL,客戶端下一步要求什麼不清楚,因此將緩存層放在API的後面並無什麼意義。緩存

服務器端緩存仍然是GraphQL的挑戰。有關緩存的更多信息能夠在GraphQL網站上找到。服務器

如何進行身份驗證和受權?

認證和受權每每是混淆的。身份驗證描述了聲明身份的過程。這是當您使用用戶名和密碼登陸服務時,您進行身份驗證。另外一方面,受權描述了指定個別用戶和用戶組對系統某些部分的訪問權限的權限規則。編程語言

GraphQL中的身份驗證可使用諸如OAuth的經常使用模式來實現。

爲了實現受權,建議將任何數據訪問邏輯委派給業務邏輯層,而不是直接在GraphQL實現中處理它。若是您想要了解如何實施受權的靈感,能夠查看Graphcool的權限查詢。

如何處理錯誤?

一個成功的GraphQL查詢應該返回一個名爲「data」的根字段的JSON對象。若是請求失敗或部分失敗(例如由於請求數據的用戶沒有正確的訪問權限),則將一個稱爲「errors」的第二根字段添加到響應中:

{
  "data": { ... },
  "errors": [ ... ]
}

有關更多詳細信息,可參考GraphQL規範

GraphQL是否支持脫機使用?

GraphQL是(web)API的查詢語言,在這個意義上,只能在線工做。 可是,客戶端的脫機支持是一個有意義的問題。 Relay和Apollo的緩存能力對於一些用例可能已經足夠了,但目前,尚未一個流行的解決方案來存儲數據。你能夠在Relay和Apollo的GitHub問題中得到更多看法,其中討論了關於脫機的支持。

離線使用和持久性的一個有趣的方法能夠在這裏找到。

相關文章
相關標籤/搜索