GraphQL實戰:寫給全棧工程師們
內容描述
《GraphQL實戰――寫給全棧工程師們》以當下流行的移動互聯網應用開發為切入點,結合作者多年的前後端實際架構經驗,針對目前互聯網上程序員們對GraphQL的疑問和誤解,並輔以業界真實案例,對前後端設計中的難點要點分別加以介紹。在前端,本書重點講述了如何提升用戶體驗和響應速度;在後端,主要講解了在高併發海量數據環境下的設計與優化;*後,還介紹了如何讓GraphQL與大數據平臺整合來訓練機器學習模型。
《GraphQL實戰――寫給全棧工程師們》內容涵蓋前端、後端和大數據平臺開發,非常適合全棧程序員閱讀,也可作為前端程序員、後端程序員、大數據工程師、算法工程師和技術型產品經理提升知識儲備的參考書。
目錄大綱
前言
導讀―本書為快速學習設計
第1章 GraphQL API設計和全棧開發1
1.1 什麼是GraphQL2
1.2 分布式系統2
1.2.1 擴展性3
1.2.2 可靠性3
1.2.3 遠程資源共享4
1.2.4 更強的處理能力4
1.3 C/S架構與API4
1.3.1 C/S架構4
1.3.2 前端與後端5
1.3.3 全棧程序員5
1.3.4 應用程序接口6
1.4 RESTful API的起源與特點7
1.4.1 倉庫保管員的窘境7
1.4.2 REST無狀態的好處8
1.4.3 RESTful API是否真的無狀態8
1.4.4 RESTful API是否是數據傳輸協議9
1.4.5 RESTful API的好處是什麼9
1.5 RESTful API的主要問題10
1.5.1 數據定制的問題10
1.5.2 多次請求的問題10
1.5.3 異常處理的問題10
1.5.4 返回數據格式未知的問題11
1.5.5 請求Endpoint和方式過多的
問題11
1.6 GraphQL如何解決RESTful API的
問題11
1.6.1 GraphQL可以自由定制數據11
1.6.2 GraphQL可以把多次請求合併為
一個12
1.6.3 GraphQL錯誤以及異常信息
明確12
1.6.4 GraphQL返回數據的形式和查詢
請求同構13
1.6.5 GraphQL使用單一的Endpoint14
1.6.6 GraphQL替代了什麼14
1.7 GraphQL引發的疑慮15
1.7.1 GraphQL是否還是RESTful15
1.7.2 GraphQL增大了後端系統設計的
難度15
1.7.3 GraphQL是否會帶來後端性能
問題15
1.7.4 遷移到GraphQL的代價16
1.7.5 GraphQL是該前端驅動還是後端
驅動16
1.8 GraphQL全棧框架的選用16
1.8.1 Relay17
1.8.2 Apollo17
第2章 GraphQL初體驗―電商API設計18
2.1 基本開發環境的搭建19
2.2 和GraphQL互動20
2.2.1 實時交互界面GraphiQL的使用20
2.2.2 通過curl發送請求21
2.2.3 使用第三方客戶端21
2.3 Schema與定義數據類型22
2.3.1 強類型的查詢語言22
2.3.2 服務器端的Schema23
2.3.3 標量類型24
2.3.4 自定義複雜類型25
2.3.5 枚舉26
2.3.6 列表以及對象的列表27
2.4 定義操作28
2.4.1 只讀查詢操作28
2.4.2 可寫修改操作30
2.4.3 訂閱操作31
2.4.4 傳遞輸入類型31
2.4.5 操作也是字段33
2.5 精煉數據模型與操作33
2.5.1 接口和繼承33
2.5.2 聯合35
2.6 精煉查詢36
2.6.1 使用變量36
2.6.2 使用別名37
2.6.3 使用片段38
2.6.4 類型條件39
2.6.5 使用Directive40
2.6.6 後端工程師的福音41
2.7 簡單數據驗證41
2.7.1 必填值的驗證42
2.7.2 標量值的驗證42
第3章 電商網站前端開發44
3.1 GraphQL前端開發要點45
3.1.1 前端開發的主要任務45
3.1.2 前端開發的難點46
3.1.3 前端技術的選型46
3.2 前端React項目初始化47
3.2.1 React特點簡介47
3.2.2 React 整合GraphQL前端系統
設計48
3.2.3 創建React前端工程49
3.2.4 安裝Apollo客戶端49
3.2.5 初始化GraphQL客戶端50
3.2.6 手動發送查詢51
3.3 只讀數據的React UI組件51
3.3.1 構建GraphQL Query查詢51
3.3.2 定義列表元素組件52
3.3.3 定義列表組件52
3.3.4 綁定靜態查詢和UI組件53
3.3.5 使用Query組件54
3.3.6 從Query組件中接收一個參數55
3.3.7 數據的接收以及出錯處理56
3.3.8 手動刷新57
3.4 修改數據的React UI組件57
3.4.1 定義一個帶有變量的Mutation
操作58
3.4.2 使用Mutation UI組件58
3.5 支持訂閱59
3.5.1 什麼時候使用訂閱59
3.5.2 訂閱是如何實現的60
3.6 本地數據60
第4章 基於Node.js的GraphQL後端61
4.1 GraphQL後端架構思想62
4.1.1 “薄”層設計62
4.1.2 “門戶”設計64
4.1.3 面向業務設計64
4.2 GraphQL層的職責與實現65
4.2.1 GraphQL層的職責65
4.2.2 GraphQL層的實現65
4.2.3 Resolver函數與分治策略67
4.3 Apollo GraphQL後端框架68
4.3.1 依賴庫的安裝68
4.3.2 定義和解析Schema69
4.3.3 綁定處理查詢操作函數69
4.4 詳解Resolver函數72
4.4.1 Resolver的各種返回類型72
4.4.2 Resolve一個類型72
4.4.3 Resolve一個複雜類型字段73
4.4.4 Resolve一個標量字段75
4.4.5 Resolve一個自定義標量字段77
4.4.6 Resolve一個列表80
4.5 GraphQL後端驗證以及錯誤
處理81
4.5.1 簡單方式81
4.5.2 使用自定義標量類型進行驗證82
4.6 異步IO84
4.6.1 基於異步非阻塞IO的JavaScript
實現84
4.6.2 同步還是異步85
4.6.3 異步Resolver85
4.7 使用JavaScript開發後端服務的
問題86
第5章 基於Go語言協程的GraphQL服務88
5.1 使用協程和上下文89
5.1.1 使用協程的原因89
5.1.2 協程和GraphQL服務90
5.1.3 上下文和作用域90
5.1.4 派生上下文91
5.2 Go語言的Web服務和中間件92
5.2.1 構建Web服務92
5.2.2 Web服務中間件93
5.2.3 基於中間件的後端架構94
5.2.4 數據收集中間件95
5.2.5 數據庫會話中間件95
5.3 G