简介
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代码风格检测功能