簡介
GraphQL 既是一種用於 API 的查詢語言也是一個滿足你資料查詢的執行時。 GraphQL 對你的 API 中的資料提供了一套易於理解的完整描述,使得客戶端能夠準確地獲得它需要的資料,而且沒有任何冗餘,也讓 API 更容易地隨著時間推移而演進,還能用於構建強大的開發者工具。
優點:
- 請求你所要的資料不多不少
- 獲取多個資源只用一個請求
- 描述所有的可能型別系統
- 強大的開發者工具
- API 演進無需劃分版本
本篇文章中將搭配Koa實現一個GraphQL的腳手架,配合Mysql2實現一個簡單的腳手架
專案結構如下所示
.
├─app
│ ├─dao // 使用資料庫
│ │ └─common // 資料庫查詢插入公共元件
│ ├─resolver // graphql的回撥函式
│ ├─routes // 書寫普通介面
│ ├─schema // graphql的配置檔案
│ └─utils // 配置公共模組
└─config // 配置檔案
複製程式碼
如何使用
- git clone
git@github.com:RenaultZC/koa-shelf.git
- npm install
- 複製config/db-template.js到config/db.js,然後配置資料庫相關資訊,建立test表,欄位text為String型別
- npm run dev
- 到localhost:5000/graphql介面訪問,查詢示例:
query{
getText{
text
}
}
複製程式碼
詳細介紹專案目錄
dao資料夾
該檔案下寫的是資料庫操作,對於mysql資料庫的增刪改查操作,通過呼叫common公共元件中的makePromiseForQuery和makePromiseForExecute進行查詢或增刪改
resolver資料夾
該檔案下寫的是對於GraphQL解析器的書寫,會通過graphql.js 將該檔案下的所有檔案進行整合輸出
schema資料夾
該檔案下寫的是對於GraphQL服務中的變數及型別的書寫,會通過graphql.js 將該檔案下的所有檔案進行整合輸出,與resolver函式一同生成GraphQL查詢介面
routes資料夾
該檔案下會書寫普通介面,通過index.js的暴露出去來引用
db.js檔案
為資料庫的基礎配置,建立資料庫連線池,減少資料庫重連的消耗
graphql.js檔案
整合resolver資料夾和schema資料夾生成GraphQL介面
logger.js檔案
負責後臺開啟後的日常日誌列印,方便後臺崩潰查錯
呼叫方式
import { getLogger } from '../logger'
const logger = getLogger()
logger.error(`Reason: test error, Date:${new Date().toLocaleString()}, error:${e}`)
複製程式碼
config資料夾
資料庫基礎配置檔案db.js
日誌基礎配置檔案log4.json
腳手架實現操作
實現普通GraphQL示例
實現Router介面示例
實現資料庫操作示例
程式碼使用ES6風格
實現日誌檔案記錄功能
加入ESlint程式碼風格檢測功能