emb-api

0.1.319 • Public • Published

gcl

目录

Install

$ npm install emb-api

码农村 nodejs emb扩展类库

Introduction

emb-api为emb下为其它vesh项目接入emb系统开发的API工具,涉及 EMBDataFactory EMBModule > EMBAutoFactoryDecorator > EMBMySQLConverter > EMBMsSQLConverter(todo) > EMBNoSQLConverter(todo) EMBEventModuler

config

    index.npcf
    "AppSettings": {
        "embconnect": {
            "host": "https://emb.cv.com",//emb系统域名
            "method": "POST",
            "timeout ": 60000,
            "SystemID":"90e1373f162011e8b40400505635a088",
            "TokenURL":"/api/createToken.single",
            "DoURL":"/api/do.single",
            "expireTime":7
        },
    },
    "Middler": {
        "VESH.view": {
            "com.coooders.Project.VESH.HttpModulers": {
                "mode": "static",
                "params": [
                    ...
                    {
                        /*
                        识别_token参数完成对emb调用_token参数的会话重置,保证emb系统反向调用成功
                        识别_m参数协助EMBAutoFactoryDocator完成 URL=>MySQL,MsSQL,NoSQL功能转换。
                        要求URL必须按照[库|~]/[表|*][/[字段|索引|*]]/[操作|*]定义,并强制要求在Ni文件夹下的npcf配置文件中按照如下格式和顺序进行命令搜索,如无权限限制则不允许调用_m命令
                        * 表结构级别
                        *      库.表.类型.操作
                        *      库.表.类型.*
                        *      库.表.*.操作
                        *      库.*.类型.操作
                        *      库.*.*.操作
                        *      库.*.*.*
                        * 表数据级别
                        *      库.表.操作
                        *      库.表.edit
                        *      库.*.edit
                        *      库.表.nodel
                        *      库.*.nodel
                        *      库.*.操作
                        *      库.表.*
                        *      库.*.*
                        * 库级别
                        *      库.操作
                        *      库.*
                        *      *.操作
                        * 其中库 可以是 ~:当前连接库 或者 库 :Ni中定义许可的命令
                        然后将参数由_m改为_n触发NiModuler调用。
                        */
                        "type": "EMBModuler",
                        "path": "emb-api",
                        "params": [{"ref":"EMB/com.coooders.project.emb.crypt"},{"middler":true},"Ni"]
                    },
                    {
                        "type": "NiModuler",
                        "path": "~V/Control/core-modulers",
                        "params": [
                            [{
                                    "type": "FormFilter"
                                },
                                {
                                    "type": "SessionFilter",
                                    "params": [".User;.PIDS;.EIDS"]
                                }
                            ], {
                                "middler": true
                            }, "Ni"
                        ]
                    },{
                        //识别_e参数并将执行结果merge参数(一般是dbresult的single()结果merge输入参数后按照_e的methodID进行处理。
                        "type": "EMBEventModuler",
                        "path": "emb-api",
                        "params": ["emb"] //emb模板
                    },
                    ...
                ]
        },
        "EMB": {
            "constructorparalength": false,
            "size": 50,
            "app": "33",
            "method": "constructor",
            "mode": "static",
            "path": "emb-api",
            "com.coooders.project.emb.crypt":{"type": "des3xcrypt", "path": "gcl/com/coooders/module/des3xcrypt", "params": ["**********", "******"]},//内部会话保持使用

            "com.coooders.project.emb.crypt2":{"type": "des3xcrypt", "path": "gcl/com/coooders/module/des3xcrypt", "params": ["**********", "******"]}//外部鉴权使用
        },
        "Ni": {
            "embfactory":{
                "type":"EMBDataFactory",//用于调用EMB系统
                "path":"emb-api",
                "params":[{ref:"EMB/com.coooders.project.emb.crypt2"}]
            },
            "embautofactory":{
                "type":"EMBAutoFactoryDecorator",
                "path":"emb-api",
                "params":[
                    {ref:"Ni/mysqlfactory"},//装饰的mysqlfactory
                    {type:"EMBMySQLConverter"}//使用mysql url=>sql翻译器
                ]
            },
            //此时可在Ni框架中调用名为emb的数据模板,根据method参数通过emb系统调用其它系统的服务,命令,事件
            "emb": {
                "type": "NiTemplate",
                "mode": "instance",
                "params": [{
                    "type": "NiStaticDataResource",
                    "params": [{ "ref": "embfactory" }, { "appsetting": "embconnect" }]
                }, { "ref": "cm" }]
            },
            //此时可以在Ni框架中或者通过_m调用w_emb或者通过action内部调用w_emb方式来使用命令行和参数搭配自动生成MySQL了。
            "w_emb":{
                "type": "NiTemplate",
                "mode": "instance",
                "params": [{
                    "type": "NiInstanceDataResource",
                    "params": [{ "ref": "embautofactory" }, { "appsetting": "w_wx_connect" }]
                }, { "ref": "cm" }]
            },
        }
    emb.npcf
    "Module.admin.removeBinding":{
        "params": {
            "method": { "type": "VarChar","value":"aeae3ca17df811e8b09b000c29187cb0" },//触发的服务、命令、事件
            "ids": { "type": "VarChar" },//参数
            "URL": { "type": "VarChar","value":"http://ec.cv.com/api/do.void" }//参数
        }, "template": "emb" },
    "cv_wx.*.*.nodel": {
        "params": {
        "_TestPermission":{"type":"VarChar","value":"WX.数据管理.编辑"} //重点是命令“cv_wx.*.*.nodel” 对应的权限 "WX.数据管理.编辑" 和template "w_emb"
    }, "template": "w_emb" },
    "~.*.*.nodel": {
        "params": {
        "_TestPermission":{"type":"VarChar","value":"WX.数据管理.编辑"} //重点是命令“~.*.*.nodel” 对应的权限 "WX.数据管理.编辑" 和template "w_emb"
    }, "template": "w_emb" },

EMBModule+EMBAutoFactoryDecorator+EMBMySQLConverter 库.表.类型.操作 URL和命令对应的SQL关系定义

库.表.类型.操作 是对表结构进行操作的处理 其在_m方式调用时需要搜索4级操作的命令定义以确认权限,如果是代码方式调用则不需要

  • 库 使用 库名或者~表示当前库
  • 表 使用 为要操作的表名
  • 类型 使用 column 或者 index
  • 操作 使用 add/drop
  • 当其通过_m方式调用时会按照如下顺序在Ni文件夹内文件寻找命令 并根据命令定义验证 权限和template数据模板
  • 库.表.类型.操作
  • 库.表.类型.*
  • 库.表.*.操作
  • 库.*.类型.操作
  • 库...操作
  • 库...* 其URL和命令对应关系是
    '/库/表/类型/操作.json/tjson/jsonp/tjsonp?_m=MT' => ..类型.操作 => SQL => json/tjson/jsonp/tjsonp
    当操作为add 类型为 column时 post的参数 需要是 字段名:字段类型 譬如 ID:VarChar(32),Name:NVarchar(255)。将分别建立字段
    当操作为add 类型为 Index时 post的参数 需要是字段名:ASC|DESC 譬如 ID:ASC,Name:Desc.将根据2个字段建一个联合索引,同时支持参数中有_unique:*出现 说明该索引为唯一索引。
    当操作为drop 类型为 column时 post的参数 需要是 字段名:* 譬如 ID:'',Name:123。将分别删除字段
    当操作为drop 类型为 Index时 post的参数 需要是字段名:* 譬如 ID:'',Name:123.将根据2个字段删除一个联合索引
    当操作为change 类型为 column时 post的参数 需要是 字段名:字段类型 譬如 ID:VarChar(32),Name:NVarchar(255)。将分别修改字段
    当操作为change 类型为 Index时 post的参数 需要是字段名:ASC|DESC 譬如 ID:ASC,Name:Desc.将根据2个字段重建一个联合索引,同时支持参数中有_unique:*出现 说明该索引为唯一索引。
    

库.表.操作 是对表及其数据进行操作的处理 其在_m方式调用时需要搜索3级操作的命令定义以确认权限,如果是代码方式调用则不需要

库      使用 库名或者~表示当前库 
表      使用 为要操作的表名
操作    使用 create/drop/truncate/add/update/select/del/count/sum
当其通过_m方式调用时会按照如下顺序在Ni文件夹内文件寻找命令 并根据命令定义验证 权限和template数据模板
  库.表.操作
  库.表.edit
  库.*.edit
  库.表.nodel
  库.*.nodel
  库.*.操作
  库.表.*
  库.*.*
其URL和命令对应关系是
    '/库/表/操作.json/tjson/jsonp/tjsonp?_m=MT' => ..操作 => SQL => json/tjson/jsonp/tjsonp
    因为删除数据的极端严肃性 所以设计 .[|*].* 操作不包括 drop/del/truncate等操作的授权。所以权限组如下
    .[|*].* => create/add/update/select/count/sum
    .[|*].nodel => create/add/update
    .[|*].edit => create/add/update/drop/truncate/del
    .[|*].[create|drop|truncate|add|update|select|del|count|sum] => create|drop|truncate|add|update|select|del|count|sum
    当操作为create时 post的参数 需要是
        字段名:字段类型 譬如 ID:VarChar(32),Name:NVarchar(255)。将分别对应建立字段。
        _ID:字段名[+字段名] 譬如ID[,+]Name进行主键创建
        _Index:字段名+字段名,字段名+字段名 譬如ID,ID+Name进行索引创建
    当操作为drop时 不需要post参数 将根据表名删除表
    当操作为add时 post参数 按照字段名:值的方式进行创建,不填写字段名则将填写默认值。其中值允许为系统参数。
    当操作为update时 post参数 按照字段名:值的方式进行设置,按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。也允许为_increase/_decrease,但是当值为 单双引号开头时 按照字符串处理。否则如果值中含有 (+-*/``号时都按照公式方式处理
    当操作为del时 post参数 按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
    当操作为select时 post参数 
        按照字段名:* 的方式进行查询字段设置 如果没有就显示*
        按照字段名:[?参数名] 的方式进行查询字段设置 如果没有就显示*
        按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
        按照_order:字段名 asc,字段名 desc方式进行设置,其中值允许为系统参数 其与_group互斥
        按照_group:字段名,字段名 进行设置。其中值允许为系统参数 其与_order互斥
        按照_page:数字[,数字] 方式进行设置。其中值允许为系统参数
        按照_distinct:非0 方式进行设置。
        按照_count:非0 方式进行设置。将在结果返回全部符合条件的总数
        按照_columns:a,b 方式进行设置。将在结果集中按照a:true,b:true方式进行显示

    当操作为sum时 post参数 
        按照字段名:* 的方式进行查询字段设置 如果没有就显示*,只允许有1个.
        按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
        按照_order:字段名 asc,字段名 desc方式进行设置,其中值允许为系统参数 其与_group互斥
        按照_group:字段名,字段名 进行设置。其中值允许为系统参数 其与_order互斥
        按照_page:数字[,数字] 方式进行设置。其中值允许为系统参数
        按照_distinct:非0 方式进行设置。

    当操作为count时 post参数 
        按照字段名:* 的方式进行查询字段设置 如果没有就显示*,只允许有1个.
        按照$[?]字段名:值的方式进行条件设置,其中值允许为系统参数或者计算符。
        按照_order:字段名 asc,字段名 desc方式进行设置,其中值允许为系统参数 其与_group互斥
        按照_group:字段名,字段名 进行设置。其中值允许为系统参数 其与_order互斥
        按照_page:数字[,数字] 方式进行设置。其中值允许为系统参数
        按照_distinct:非0 方式进行设置。
    
    值可以使用的系统参数有 
        ?_GUID 自动生成的GUID,
        ?_User_UID 会话用户ID,
        ?_User_OrgID 会话企业ID,
        ?_User_* User会话的其它属性
        ?_EIDS_Values 当前会话的角色串
        ?_PIDS_Values 当前会话的权限串
        ?传入值
        系统函数
    值可以使用的计算符号有,其中参数可以为?开头的系统参数;值可以为 ?开头的系统参数也可以为真实值
        <   $参数<
        >   $参数>
        <=  $参数<=
        >=  $参数>=
        =   $参数=
        !=  $参数!=
        @   $参数 between 值1 and 值2 (值按照|号分割值1 值2)
        !@  $参数 not between 值1 and 值2 (值按照|号分割值1 值2)
        ~=  $参数~=   代表  in ()
        !~=  $参数!~= 代表  not in ()
        @=  $参数@=   代表 find_in_set(,)>0
        !@=  $参数!@= 代表 not find_in_set(,)>0
        %=  $参数%=   代表  like concat(%,,%)
        !%=  $参数!%= 代表  not like concat(%,,%)
        (   $参数  代表 
        &amp;&amp;  &amp;&amp;:[{},{}]  值为JSON格式或者JSON数组格式 递归如上规则完成 ( and )操作  数组内为and
        ||  ||:[{},{}]   值为JSON格式或者JSON数组格式 递归如上规则完成 ( or )操作  数组内为or
        +  [{},{}] 用在表+ >+ <+ ,格式转换为 on 格式  + 的对象数组中分别对应表的第一次连接,第二次连接,以此类推
    表名 可以使用(+ 表示为 inner join >+表示left join <+表示 right join ,表示为, | 表示为 union &amp; 表示为union All)进行表连接操作,且按照表名顺序自动设置缩写为a,b,c,e……z,目前仅支持select,update,del,sum,count使用。
        且后续$条件或者+中必须自动带有a,b,c,d等缩写。
        del必须说明删除的表,例如a:true。
        update必须使用,分隔多个表。
        npcf文件中需要单独设置多表联合对应的Command 判断固定参数和权限

库.操作 是对库进行操作的处理 其在_m方式调用时需要搜索2级操作的命令定义以确认权限,如果是代码方式调用则不需要

库      使用 库名或者~表示当前库 
操作    使用 add/drop
当其通过_m方式调用时会按照如下顺序在Ni文件夹内文件寻找命令 并根据命令定义验证 权限和template数据模板
    库.操作
    库.*
    *.操作
其URL和命令对应关系是
    '/库/操作.json/tjson/jsonp/tjsonp?_m=MT' => .操作 => SQL => json/tjson/jsonp/tjsonp
    当操作为add时 post的参数 都不需要将根据库名建一个数据库 默认UTF-8
    当操作为drop时 post的参数 都不需要将根据库名删除一个数据库

Todo

  • EMBNoSQLConverter(todo)
  • EMBAction(todo) 用于接受EMB请求进行鉴权,心跳验证,会话创建等工作。

Readme

Keywords

Package Sidebar

Install

npm i emb-api

Weekly Downloads

93

Version

0.1.319

License

ISC

Unpacked Size

915 kB

Total Files

36

Last publish

Collaborators

  • panx
  • baibing0004