graphql-fast-api

1.0.58 • Public • Published

GraphQL-Fast-API

GraphQL Fast API 是一个通过 GraphQL 和数据库快速生成 api 的方案并且有扩展灵活按需加载等特点.

2024年03月28日 v2.*.* 正在开发版已经上线

可以使用 https://www.npmjs.com/package/graphql-fast-api?activeTab=versions 进行查看.

  • 更贴合graphql规范
  • 更灵活的扩展性
  • 更快速的api生成
  • 解决掉全局变量,避免内存混淆问题。
  • 提供分布式部署方案
  • 分离,验证,加密等模块
  • 扩展query
  • 表操作可控
  • 更新服务链接
  • 优化参数校验
  • 增加模板
  • 优化按需加载逻辑
  • 增加缓存
  • 增加日志
  • 增加错误处理
  • 增加权限控制
  • 增加分布式部署

安装 GraphQL-Fast-API

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 字段

Online RSA Key Generator

http://travistidwell.com/jsencrypt/demo/index.html https://cryptotools.net/rsagen https://www.csfieldguide.org.nz/en/interactives/rsa-key-generator/

Package Sidebar

Install

npm i graphql-fast-api

Weekly Downloads

19

Version

1.0.58

License

ISC

Unpacked Size

88.6 kB

Total Files

32

Last publish

Collaborators

  • momoca