Skip to content

team4yf/yf-fpm-server

Repository files navigation

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方式的请求,定义如下

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

  这样的设计不能满足现在的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 系统错误定义

异常编号 异常代码 异常信息 排查办法
-900 LOST_PARAM param: [${col}] required! 检查接口传入的参数
-901 NO_POST_DATA post data is empty! 接口未传入参数
-902 TIMEZONE_OVER your time zone not sync the server! 传入参数中的时间戳与服务器的事件戳相差超过了30分钟
-903 SIGN_ERROR param sign error! 参数签名错误,请检查参数拼接过程是否异常
-904 PLUGIN_LOAD_ERROR missing plugin ! plugin: ${ pname } dependent plugin: ${ dname } 某个插件缺失了另外一个插件的依赖
-905 PARAM_IS_NOT_JSON Param is not json! 参数Param不是一个正确的json格式
-906 SQL_INJECTION you have sql keyword! ex:['drop ','delete ','truncate ',';','insert ','update ','set ','use '] 传入的参数可能有sql注入
-907 NOT_LATEST Not the latest version 不是最新的版本,请及时更新
-908 NOT_METHOD Cant find the method! 调用的业务函数没有定义
-909 BIZ_MODULE_EXTEND_ERROR Biz Version ${version} Not Exists! 扩展业务的接口版本不存在
-910 TABLE_REQUIRED table required! 使用 DB 插件时,需要传入 table 参数
-911 VERSION_UNDEFINED version not defined! 调用的业务函数版本不存在
-912 AUTH_ERROR auth error! plz check your appkey ~ ' 客户端的appkey未授权
-913 ROOT_ERROR auth error! plz check roots of your app ~ 客户端的appkey权限不够
-914 BIZ_VERSION_REQUIRED Biz Version Required 业务组件版本未定义
-915 HOOK_VERSION_REQUIRED hook version cant be undefined 钩子版本未定义
-916 HOOK_HANDLER_REQUIRED hook handler cant be undefined 钩子函数未定义
-920 UNDEFINED_EXCEPTION UnDefinedException 未定义的异常
-999 UNCAUGHT_ERROR System uncaughtException 系统异常

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages