2.7.4 • Published 3 years ago

yf-fpm-server v2.7.4

Weekly downloads
4
License
MIT
Repository
-
Last release
3 years ago

yf-fpm-server

CHANGELOG

点击查看更新日志 CHANGELOG

ROADMAP

点击查看 ROADMAP

0.OVERVIEW

yf-fpm-server是一款轻量级的api服务端,可通过插件集成数据库(mysql,mongodb)的数据操作,灵活扩展自定义业务逻辑

设计概要

 背景

团队的产品从单平台,慢慢扩展到多个客户端,且有多个异构系统的数据交互,所以需要一个统一的数据输入输出口。

  • Node 作为一个事件驱动的V8服务端语言,非常适合处理高并发,非事务密集型的场景。
  • 使用koa2作为http框架,因为它够轻,够简洁,几乎没有学习成本,而且体积小,自然坑也少 偷笑
  • 没有使用restful风格,因为业务需要对数据有权限限制,而且业务交集很多,对路由的管理成本就大。
  • 采用taobao和jd的开放平台的设计方案,定义统一的入口,通过参数定位业务接口,实现灵活的业务开发。
 定义

    服务只有一个入口 /api ; 只接受application/json方式的请求,定义如下

  • 传入参数结构
参数名类型是否必须参数说明默认值示例
methodStringY需要调用的业务函数
appkeyStringY应用被分配的密钥
timestampNumberY应用端的时间戳,用于验证请求的时效性13位时间戳
vStringN调用的服务端接口的版本号
paramObjectN业务函数需要用到的参数,以JsonObject的形式传入
signStringY将接口参数进行升序排列,如 appkey,method,param,timestamp添加一个masterKey=xxx此处的key来自于注册的key 组合成appkey=123&masterKey=xxxm=44444&tmiestamp=140932932932所有的参数值使用urlencode 过md5加密,生成一个32位的密钥
  • 输出参数结构
参数名类型是否必须参数说明
errnoNumberY业务函数的错误代码,通常为0,表示正常执行,<0 则表示执行错误,可通过应用说明获取到具体的错误原因。
messageStringN通常在执行出错的情况下,会输出错误的信息。
timestampNumberN返回服务端处理完信息之后的时间戳。
dataObject/ArrayY一般的查询类的业务函数,会在该字段下携带查询结果信息;具体是Object类型还是Array类型则根据不同的业务函数的说明而定。
errorObjectN错误信息的详细内容

  这样的设计不能满足现在的restful范式,但是能满足小规模团队的需求,可提高业务实现的开发效率;

1.Install

$ npm install yf-fpm-server --save

2.Code

$ vi app.js

'use strict';
const { Fpm } = require('yf-fpm-server');
const fpm = new Fpm();
const biz = fpm.createBiz('0.0.1');
biz.addSubModules('test', {
  foo: async (args, ctx, before) => {
    return Promise.reject({errno: -3001})
  }
});
fpm.addBizModules(biz);
fpm.run()
  .then(() => {
    fpm.logger.info('ready ...')
  });

3.Run It

$ node app.js

4.Global Error Define

System 系统错误定义

异常编号异常代码异常信息排查办法
-900LOST_PARAMparam: ${col} required!检查接口传入的参数
-901NO_POST_DATApost data is empty!接口未传入参数
-902TIMEZONE_OVERyour time zone not sync the server!传入参数中的时间戳与服务器的事件戳相差超过了30分钟
-903SIGN_ERRORparam sign error!参数签名错误,请检查参数拼接过程是否异常
-904PLUGIN_LOAD_ERRORmissing plugin ! plugin: ${ pname } dependent plugin: ${ dname }某个插件缺失了另外一个插件的依赖
-905PARAM_IS_NOT_JSONParam is not json!参数Param不是一个正确的json格式
-906SQL_INJECTIONyou have sql keyword! ex:'drop ','delete ','truncate ',';','insert ','update ','set ','use '传入的参数可能有sql注入
-907NOT_LATESTNot the latest version不是最新的版本,请及时更新
-908NOT_METHODCant find the method!调用的业务函数没有定义
-909BIZ_MODULE_EXTEND_ERRORBiz Version ${version} Not Exists!扩展业务的接口版本不存在
-910TABLE_REQUIREDtable required!使用 DB 插件时,需要传入 table 参数
-911VERSION_UNDEFINEDversion not defined!调用的业务函数版本不存在
-912AUTH_ERRORauth error! plz check your appkey ~ '客户端的appkey未授权
-913ROOT_ERRORauth error! plz check roots of your app ~客户端的appkey权限不够
-914BIZ_VERSION_REQUIREDBiz Version Required业务组件版本未定义
-915HOOK_VERSION_REQUIREDhook version cant be undefined钩子版本未定义
-916HOOK_HANDLER_REQUIREDhook handler cant be undefined钩子函数未定义
-920UNDEFINED_EXCEPTIONUnDefinedException未定义的异常
-999UNCAUGHT_ERRORSystem uncaughtException系统异常
2.7.4

3 years ago

2.7.3

3 years ago

2.7.0

3 years ago

2.7.2

3 years ago

2.7.1

3 years ago

2.6.3

4 years ago

2.6.2

4 years ago

2.6.1

5 years ago

2.6.0

5 years ago

2.5.4

5 years ago

2.5.3

5 years ago

2.5.1

5 years ago

2.5.0

5 years ago

2.4.12

6 years ago

2.4.11

6 years ago

2.4.1-0.1

6 years ago

2.4.10

6 years ago

2.4.9

6 years ago

2.4.8

6 years ago

2.4.7

6 years ago

2.4.6

6 years ago

2.4.5

6 years ago

2.4.4

6 years ago

2.4.3

6 years ago

2.4.2

6 years ago

2.4.1

6 years ago

2.4.0

6 years ago

2.3.1

6 years ago

2.3.0

6 years ago

2.2.28

6 years ago

2.2.27

6 years ago

2.2.26

6 years ago

2.2.25

6 years ago

2.2.24

6 years ago

2.2.23

6 years ago

2.2.22

6 years ago

2.2.21

7 years ago

2.2.20

7 years ago

2.2.19

7 years ago

2.2.18

7 years ago

2.2.17

7 years ago

2.2.16

7 years ago

2.2.15

7 years ago

2.2.14

7 years ago

2.2.13

7 years ago

2.2.12

7 years ago

2.2.11

7 years ago

2.2.10

7 years ago

2.2.9

7 years ago

2.2.8

7 years ago

2.2.7

7 years ago

2.2.5

7 years ago

2.2.4

7 years ago

2.2.3

7 years ago

2.2.2

7 years ago

2.2.1

7 years ago

2.2.0

7 years ago

2.1.20

7 years ago

2.1.19

7 years ago

2.1.18

7 years ago

2.1.17

7 years ago

2.1.16

7 years ago

2.1.15

7 years ago

2.1.14

7 years ago

2.1.13

7 years ago

2.1.12

7 years ago

2.1.11

7 years ago

2.1.10

7 years ago

2.1.9

7 years ago

2.1.8

7 years ago

2.1.7

7 years ago

2.1.6

7 years ago

2.1.5

7 years ago

2.1.4

7 years ago

2.1.3

7 years ago

2.1.2

7 years ago

2.1.1

8 years ago

2.0.9

8 years ago

2.0.8

8 years ago

2.0.7

8 years ago

2.0.6

8 years ago

2.0.5

8 years ago

2.0.3

8 years ago

2.0.2

8 years ago

2.0.0

8 years ago