幫助中心 | 我的帳號 | 關於我們

GraphQL實戰(寫給全棧工程師們)

  • 作者:王北南
  • 出版社:機械工業
  • ISBN:9787111630937
  • 出版日期:2019/07/01
  • 裝幀:平裝
  • 頁數:184
人民幣:RMB 59 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書以當下流行的移動互聯網應用開發為切入點,結合作者多年的前後端實際架構經驗,針對目前互聯網上程序員們對GraphQL的疑問和誤解,並輔以業界真實案例,對前後端設計中的難點要點分別加以介紹。在前端,本書重點講述了如何提升用戶體驗和響應速度;在後端,主要講解了在高併發海量數據環境下的設計與優化;最後,還介紹了如何讓GraphQL與大數據平台整合來訓練機器學習模型。
    本書內容涵蓋前端、後端和大數據平台開發,非常適合全棧程序員閱讀,也可作為前端程序員、後端程序員、大數據工程師、演算法工程師和技術型產品經理提升知識儲備的參考書。

作者介紹
王北南
    王北南,Twitter核心服務組高級研發工程師,畢業於美國Syracuse大學電腦科學與工程學院,獲博士學位,曾任國內多家公司CTO、技術總監、首席架構師。     在前後端以及全棧研發一線奮鬥十余載,專註于高併發、高可用微服務平台以及大數據平台架構,擁有重構並優化千億級日訪問量微服務以及數據採集經驗。力求用淺顯的語言來講述自己的實戰經驗和國內外的先進理論,以滿足中國互聯網行業的實際需求。

目錄
前言
導讀——本書為快速學習設計
第1章  GraphQL API設計和全棧開發
  1.1  什麼是GraphQL
  1.2  分散式
    1.2.1  擴展性
    1.2.2  可靠性
    1.2.3  遠程資源共享
    1.2.4  更強的處理能力
  1.3  C/S架構與API
    1.3.1  C/S架構
    1.3.2  前端與後端
    1.3.3  全棧程序員
    1.3.4  應用程序介面
  1.4  RESTful API的起源與特點
    1.4.1  倉庫保管員的窘境
    1.4.2  REST無狀態的好處
    1.4.3  RESTful API是否真的無狀態
    1.4.4  RESTful API是否是數據傳輸協議
    1.4.5  RESTful API的好處是什麼
  1.5  RESTful API的主要問題
    1.5.1  數據定製的問題
    1.5.2  多次請求的問題
    1.5.3  異常處理的問題
    1.5.4  返回數據格式未知的問題
    1.5.5  請求Endpoint和方式過多的問題
  1.6  GraphQL如何解決RESTful API的問題
    1.6.1  GraphQL可以自由定製數據
    1.6.2  GraphQL可以把多次請求合併為一個
    1.6.3  GraphQL以及異常信息明確
    1.6.4  GraphQL返回數據的形式和查詢請求同構
    1.6.5  GraphQL使用單一的Endpoint
    1.6.6  GraphQL替代了什麼
  1.7  GraphQL引發的疑慮
    1.7.1  GraphQL是否還是RESTful
    1.7.2  GraphQL了後端設計的難度
    1.7.3  GraphQL是否會帶來後端性能問題
    1.7.4  遷移到GraphQL的代價
    1.7.5  GraphQL是該前端驅動還是後端驅動
  1.8  GraphQL全棧框架的選用
    1.8.1  Relay
    1.8.2  Apollo
第2章  GraphQL初體驗——電商API設計
  2.1  基本開發環境的搭建
  2.2  和GraphQL互動
    2.2.1  實時交互界面GraphiQL的使用
    2.2.2  通過curl發送請求
    2.2.3  使用第三方客戶端
  2.3  Schema與定義數據類型
    2.3.1  強類型的查詢語言

    2.3.2  伺服器端的Schema
    2.3.3  標量類型
    2.3.4  自定義複雜類型
    2.3.5  枚舉
    2.3.6  列表以及對象的列表
  2.4  定義操作
    2.4.1  只讀查詢操作
    2.4.2  可寫修改操作
    2.4.3  訂閱操作
    2.4.4  傳遞輸入類型
    2.4.5  操作也是欄位
  2.5  精煉數據模型與操作
    2.5.1  介面和繼承
    2.5.2  聯合
  2.6  精煉查詢
    2.6.1  使用變數
    2.6.2  使用別名
    2.6.3  使用片段
    2.6.4  類型條件
    2.6.5  使用Directive
    2.6.6  後端工程師的福音
  2.7  簡單數據驗證
    2.7.1  必填值的驗證
    2.7.2  標量值的驗證
第3章  電商網站前端開發
  3.1  GraphQL前端開發要點
    3.1.1  前端開發的主要任務
    3.1.2  前端開發的難點
    3.1.3  前端技術的選型
  3.2  前端React項目初始化
    3.2.1  React特點簡介
    3.2.2  React整合GraphQL前端設計
    3.2.3  創建React前端工程
    3.2.4  安裝Apollo客戶端
    3.2.5  初始化GraphQL客戶端
    3.2.6  手動發送查詢
  3.3  只讀數據的React UI組件
    3.3.1  構建GraphQL Query查詢
    3.3.2  定義列表元素組件
    3.3.3  定義列表組件
    3.3.4  綁定靜態查詢和UI組件
    3.3.5  使用Query組件
    3.3.6  從Query組件中接收一個參數
    3.3.7  數據的接收以及出錯處理
    3.3.8  手動刷新
  3.4  修改數據的React UI組件
    3.4.1  定義一個帶有變數的Mutation
      操作
    3.4.2  使用Mutation UI組件
  3.5  支持訂閱

    3.5.1  什麼時候使用訂閱
    3.5.2  訂閱是如何實現的
  3.6  本地數據
第4章  基於Node.js的GraphQL後端
  4.1  GraphQL後端架構思想
    4.1.1  「薄」層設計
    4.1.2  「門戶」設計
    4.1.3  面向業務設計
  4.2  GraphQL層的職責與實現
    4.2.1  GraphQL層的職責
    4.2.2  GraphQL層的實現
    4.2.3  Resolver函數與分治策略
  4.3  Apollo GraphQL後端框架
    4.3.1  依賴庫的安裝
    4.3.2  定義和解析Schema
    4.3.3  綁定處理查詢操作函數
  4.4  詳解Resolver函數
    4.4.1  Resolver的各種返回類型
    4.4.2  Resolve一個類型
    4.4.3  Resolve一個複雜類型欄位
    4.4.4  Resolve一個標量欄位
    4.4.5  Resolve一個自定義標量欄位
    4.4.6  Resolve一個列表
  4.5  GraphQL後端驗證以及處理
    4.5.1  簡單方式
    4.5.2  使用自定義標量類型進行驗證
  4.6  非同步IO
    4.6.1  基於非同步非阻塞IO的實現
    4.6.2  同步還是非同步
    4.6.3  非同步Resolver
  4.7  使用開發後端服的問題
第5章  基於Go語言協程的GraphQL服務
  5.1  使用協程和上下文
    5.1.1  使用協程的原因
    5.1.2  協程和GraphQL服務
    5.1.3  上下文和作用域
    5.1.4  派生上下文
  5.2  Go語言的Web服務和中間件
    5.2.1  構建Web服務
    5.2.2  Web服務中間件
    5.2.3  基於中間件的後端架構
    5.2.4  數據收集中間件
    5.2.5  資料庫會話中間件
  5.3  GraphQL Http請求的處理
    5.3.1  GraphQL請求的解析
    5.3.2  執行GraphQL查詢和準備結果
    5.3.3  合理使用Http請求上下文
  5.4  使用Go語言的GraphQL後端是否會有性能問題
第6章  實體數據持久化建模與實現
  6.1  基於ID的資料庫訪問層設計

    6.1.1  和API設計
    6.1.2  實現數據讀取
    6.1.3  實現數據寫入
  6.2  使用ID訪問數據的好處
    6.2.1  利於資料庫查詢性能優化
    6.2.2  利於分片
    6.2.3  利於和緩存結合
    6.2.4  防止重複讀取同一資源
    6.2.5  利於Resolver函數實現
  6.3  建立基於ID的抽象Schema數據類型
    6.3.1  Relay的Schema設計方案
    6.3.2  Relay的GraphQL查詢設計
  6.4  分散式ID生成演算法
    6.4.1  Snowflake ID
    6.4.2  Fast ID的安裝和代碼示例
    6.4.3  設置
  6.5  GraphQL連接資料庫訪問層
    6.5.1  用戶數據DAO實例
    6.5.2  DAO在GraphQL後端架構中存在的意義
  6.6  簡單分頁設計
    6.6.1  簡單分頁設計
    6.6.2  Cursor分頁方式
    6.6.3  客戶端分頁顯示
    6.6.4  伺服器端Resolve分頁
  6.7  一對多關係
    6.7.1  Schema和Resolver函數定義
    6.7.2  外鍵方式
    6.7.3  聚合方式
第7章  「關係」的設計和持久化
  7.1  用戶關係建模
    7.1.1  如何表達「圖」
    7.1.2  基本設計思路
  7.2  邊的集合與游標分頁
    7.2.1  邊的簡單表達
    7.2.2  邊的簡單分頁
    7.2.3  邊的游標分頁
  7.3  借鑒Relay的邊設計方案
  7.4  「關係」數據的數據訪問層設計
第8章  全棧API優化
  8.1  前後端數據的一致性
    8.1.1  數據的存在形式
    8.1.2  Query與Mutation
  8.2  客戶端緩存更新機制
    8.2.1  客戶端使用Mutation更新緩存
    8.2.2  定製更新緩存
  8.3  出錯、超時與重試
    8.3.1  信息的定義
    8.3.2  伺服器端如何返回出錯信息
    8.3.3  客戶端如何處理出錯
  8.4  使用高階函數來優化GraphQL組件

    8.4.1  高階函數
    8.4.2  使用函數式的聲明方式
    8.4.3  使用Recompose
  8.5  通盤考慮API設計
    8.5.1  面向真實數據關係建模
    8.5.2  遺留數據建模
  8.6  自省和文檔
    8.6.1  命名比文檔重要
    8.6.2  自省
    8.6.3  文檔
    8.6.4  API的升級與兼容性
第9章  認證與授權
  9.1  基於Http協議的用戶認證
    9.1.1  使用Cookie的認證方式
    9.1.2  使用訪問令牌Token的認證方式
  9.2  基於訪問令牌Token的用戶認證
    9.2.1  訪問令牌的生成
    9.2.2  GraphQL整合Token要點
    9.2.3  伺服器端拿到Token以後做什麼
  9.3  查詢操作層面的許可權控制
    9.3.1  設計GraphQL的授權服務
    9.3.2  JWT Token中數據的定義
    9.3.3  JWT Token的生成
    9.3.4  驗證Token中間件
    9.3.5  解析和驗證Token
    9.3.6  通過上下文傳遞授權信息
    9.3.7  數據細粒度的許可權控制
第10章  高併發後端優化
  10.1  處理N+1問題
    10.1.1  什麼是N+1問題
    10.1.2  N+1問題為什麼會危害性能
    10.1.3  解決N+1問題的思路
    10.1.4  GraphQL如何批處理查詢
  10.2  使用DataLoader
    10.2.1  DataLoader的工作模式
    10.2.2  批處理函數
    10.2.3  DataLoader與下游服務
    10.2.4  批處理函數對於error的處理
    10.2.5  為每個Http請求創建DataLoader
  10.3  使用Cache
    10.3.1  GraphQL與RESTful API對緩存的不同設計
    10.3.2  Memcached的查詢與優化
    10.3.3  Redis的查詢與優化
  10.4  NoSQL與下游服務的資料庫查詢與優化
    10.4.1  使用內嵌對象存儲數據
    10.4.2  使用對象引用存儲數據
    10.4.3  基於列Column存儲的數據建模
    10.4.4  下游服務數據源的優化
  10.5  SQL資料庫的數據查詢合併與優化
    10.5.1  基於Key-Value設計的SQL資料庫優化

    10.5.2  基於傳統資料庫查詢的資料庫優化
    10.5.3  高併發下的SQL數據查詢瓶頸
  10.6  GraphQL與大數據和機器學習
    10.6.1  使用GraphQL獲取實時數據
    10.6.2  獲取大批次對象團的問題
    10.6.3  高頻訪問GraphQL服務的問題
    10.6.4  GraphQL應用的數據採集
第11章  測試與部署
  11.1  單元測試
    11.1.1  在Resolver函數中使用依賴注入
    11.1.2  創建Mock對象
    11.1.3  編寫單元測試代碼
  11.2  集成測試
    11.2.1  準備環境
    11.2.2  準備客戶端
    11.2.3  編寫測試用例並驗證結果
    11.2.4  持續集成
  11.3  壓力測試與Profiling
    11.3.1  簡單壓力測試
    11.3.2  Fork生產環境流量
    11.3.3  使用訪問日誌進行壓力測試
    11.3.4  Diffy測試
  11.4  開發環境部署
    11.4.1  配置下游服務
    11.4.2  負載均衡的部署
  11.5  生產環境彈性部署
    11.5.1  服務註冊與發現
    11.5.2  高可用性
後記

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032