英文原版地址:https://www.howtographql.com/...html
在前端使用GraphQL API,對於抽象和實現基礎功能,是一個好機會。讓咱們考慮你在應用中可能想要的一些「基礎」功能:前端
固然,沒有什麼能夠阻止你僅使用HTTP來獲取你的數據,而後本身逐個處理,直到正確的信息最終顯示在UI上。 可是GraphQL提供了避免大量手動勞動的能力,讓你專一於應用的核心部分! 在下文中,咱們將更詳細地討論這些能力。react
目前有兩個主要的GraphQL客戶端庫。 第一個是Apollo客戶端,這是一個社區支持的項目,旨在爲全部主要開發平臺構建強大而靈活的GraphQL客戶端。 第二個被稱爲Relay,它是Facebook官方的GraphQL客戶端,它大大優化了性能,但只能在web上可用。git
GraphQL的主要優勢是它容許您以聲明的方式獲取和更新數據。換句話說,咱們在API抽象層面更進一步,沒必要再本身處理低級網絡任務。github
之前你使用純HTTP(如JavaScript中的fetch
或iOS中的NSURLSession
)從API加載數據。使用GraphQL後,全部操做都將寫入一個查詢,聲明瞭數據需求後,讓系統負責發送請求並處理響應。這正是GraphQL客戶端要作的。web
在服務端的響應,被GraphQL客戶端接收到以後,數據須要最終展示在UI中。根據開發的平臺和選用的框架不一樣,UI更新也將會有不一樣的方式。編程
以React爲例,GraphQL客戶端使用高階組件的理念來獲取所需的數據,並使其在組件的porps
中可用。通常來講,GraphQL的聲明式特性與函數式反應型編程(FRP)結合的很好。二者能夠造成強大的組合,其中視圖只是聲明其數據依賴,UI則與選擇的FRP層鏈接。緩存
在大多數應用中,你須要緩存以前從服務器獲取的數據。這對於提供流暢的用戶體驗和維護好用戶數據相當重要。服務器
一般,當緩存數據時,直覺是將遠程獲取的信息放入本地存儲中,以便稍後檢索。使用GraphQL,直覺上的辦法就是將GraphQL查詢的結果簡單地放入存儲,而且只要再次執行徹底相同的查詢,就返回先前存儲的數據。事實證實,這種方式對於大多數應用來講是很是低效的。網絡
更有效的方式是提早規範化數據。這意味着(多是)嵌套的查詢結果會變得平坦,而且存儲的是,可使用全局惟一ID來查詢的單個記錄內容。若是想了解更多關於這一點的信息,Apollo博客對這個內容作了很好的介紹。
因爲視圖(schema)包含有關客戶端可使用GraphQL API的全部信息,所以,客戶端在構建時驗證查詢就變得很方便。
當構建環境能夠訪問schema時,它能夠基本解析位於項目中的全部GraphQL代碼,並將其與schema中的信息進行比較。這樣就能夠捕獲打字錯誤和其餘錯誤,避免一些嚴重後果。
GraphQL的一個強大的理念是,它容許你並行地處理UI代碼和數據需求。界面和數據的緊密結合,大大提升了開發人員的體驗。不用再去考慮,如何在UI中恰當的填充數據。
結合帶來的優點大小,取決於您正在開發的平臺。例如在Javascript應用中,能夠將數據依賴和UI代碼放在同一個文件中。在Xcode中,Assistant Editor可用於同時處理視圖控制器和graphql代碼。