GraphQL Fast API 是一个通过 GraphQL 和数据库快速生成 api 的方案并且有扩展灵活按需加载等特点.
可以使用 https://www.npmjs.com/package/graphql-fast-api?activeTab=versions 进行查看.
- 更贴合graphql规范
- 更灵活的扩展性
- 更快速的api生成
- 解决掉全局变量,避免内存混淆问题。
- 提供分布式部署方案
- 分离,验证,加密等模块
- 扩展query
- 表操作可控
- 更新服务链接
- 优化参数校验
- 增加模板
- 优化按需加载逻辑
- 增加缓存
- 增加日志
- 增加错误处理
- 增加权限控制
- 增加分布式部署
npm install graphql-fast-api-v1@npm:graphql-fast-api@^1
npm install graphql-fast-api-v2@npm:graphql-fast-api@^2
全局安装主要用于保证基础运行服务。
npm install -g nrm cnpm npm-check-updates rimraf nodemon --registry=https://registry.npm.taobao.org
名称 | 命令 | 说明 |
---|---|---|
gfa:main:init | graphql-fast-api main init | 初始化执行,主要加载配置文件等。 |
gfa:generate:model | graphql-fast-api generate model | 生成模型和数据等相关文件(注:在 gfa 目录下) |
gfa:generate:clear | graphql-fast-api generate clear | 对生成文件进行清理 |
gfa:service:start | graphql-fast-api service start | 启动本地调试服务 |
例:package.json
...
"scripts": {
...
"gfa:main:init": "graphql-fast-api main init",
"gfa:generate:model": "graphql-fast-api generate model",
"gfa:generate:clear": "graphql-fast-api generate clear",
"gfa:service:start": "graphql-fast-api service start",
"global:install": "npm install -g nrm cnpm npm-check-updates rimraf nodemon --registry=https://registry.npm.taobao.org",
"module:update": "ncu -u",
"layer:zip": "rimraf node_modules;yarn install --production;D:/7-Zip/7z a './node_modules.zip' './node_modules/*'",
...
}
...
数据库使用 sequelize,需要安装对应使用的驱动,并配置 env 文件。
可按需安装数据库驱动
# One of the following:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server
$ npm install --save oracledb # Oracle Database
在gfa\config\index.js
中修改
global.gfa.dialectModule = require("mysql2"); // 可加载其它 如 mariadb
global.gfa
名称 | 说明 |
---|---|
regTypes | 此次 gql 需要注册的类型 |
modelTypes | gql 的类型,包括自己定义类型。 |
field2datas | 处理字段转换的方法,由全局和扩展中的合并页成。扩展会覆盖全局配置。 |
gqlFields | 此次 gql 的所字段的数据。 |
dbFields | 所有表及表名下的字段(文本数组) |
type2table | 类型名称和名表转换 |
table2type | 名表和类型名称转换 |
types | 此次 gql 查询所需要类型的字段 |
cwd | 项目目录 |
dir | 包的目录 |
op | sequelize 的 op |
privateKey | 私钥 |
publicKey | 公钥 |
$extend | 扩展数据 |
$headers | 请求头数据 |
response | 响应 |
headers | 响应头数据 |
dbInitReconn | 数据库重连次数 |
dialectModule | 数据库驱动。如 mysql,sqlite3 等 |
whiteList | [全局配置]白名单 |
fieldFilter | [全局配置]过滤字段 |
field2data | [全局配置]处理字段转换 |
associationField | [全局配置]关联字段更新 |
config | 读取 gfa/config/index 的配置 |
db | Sequelize 的链接 |
dbInit | 数据库是否加载完成。ture/false |
tableTypes | types 表数据缓存地址 |
modelJson | 数据结构缓存地址 |
models | 所有表的模型,用于增删改查。 |
在项目中会生成 gfa 目录
GraphQL-Fast-API-Demo 测试项目目录
├── .env 默认env文件(由GFA生成)
├── .env.production 正式环境(由GFA生成)
├── .env.development 开发环境(由GFA生成)
├── .env.local 本地环境(由GFA生成)
├── gfa GraphQL-Fast-API生成的主目录
│ ├── cert 加密解密证书文件存放目录
│ │ ├── private.key 私钥文件(由GFA生成)
│ │ └── public.key 公钥文件(由GFA生成)
│ ├── config 配置文件目录
│ │ └── index.js 配置文件(由GFA生成)
│ ├── datas 数据结构缓存目录
│ │ ├── Model.json 所有数据库表结构数据(由GFA生成)
│ │ └── Types.json 数据库Types表数据结构体(由GFA生成)
│ └── gql GraphQL主目录
│ ├── common 公用脚本目录
│ │ └── action.js 主要为query和mutation提供处理方式(由GFA生成)用户可按需修改。
│ ├── schema_static.js 静态加载所有类型(由GFA生成)
│ └── types 存放所有所需类型目录
│ ├── custom 自己定义类型目录
│ ├── extend 扩展类型目录,需与type文件同名的文本。
│ ├── model 数据模型扩展,需与models中的表名相同的.js文件
│ └── type 所有GraphQL类型文件。按数据库自动生成。
├── index.js 主入口文件
├── node_modules node_modules目录
├── package.json 包文件
└── README.md 说明文档
1.字段引用其它类型需注意大小写 应该注意字段类型与引用类型和返回数据必须大小写统一. 例:VerifyPhone.js
const fields = {
...
Token: {
type: global.gfa.modelTypes.Token,
description: '令牌',
},
...
}
在返回数据中应该也是 Token 字段
http://travistidwell.com/jsencrypt/demo/index.html https://cryptotools.net/rsagen https://www.csfieldguide.org.nz/en/interactives/rsa-key-generator/