• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

yf-api-server: yf-api-server

原作者: [db:作者] 来自: 网络 收藏 邀请

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=xxx&param=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系统异常

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap