1.9.5 • Published 2 years ago

rest-router-model v1.9.5

Weekly downloads
1
License
MIT
Repository
github
Last release
2 years ago

rest-router-model

rest-router-model是一个根据资源描述JOSN配置文件(Resource Config),自动生成REST风格的HTTP接口,并且完成数据模型映射。 它具有功能扩展性,可以通过BaseBusiness类继承,实现业务功能扩展。它是完全业务内包,只需要提供资源config和数据库配置即可。 这样可以更好更快的构建一个微服务,你只需要关心如何设计好你的资源模型。

框架:目前只支持koa上使用。

数据库:目前只支持SQL系列数据库,如Postgres, MSSQL, MySQL, MariaDB, SQLite3, Oracle, Amazon Redshift。(以knex为准)

安装

需要node v8.9.0 版本,或者更高的版本,需支持async函数.

  $ npm install rest-router-model

例子

我们将以一个学校管理服务(SchoolServer)为例: 首先编写一个资源配置文件:resourceConfig.js,下一节会详细的我们如何配置resourceConfig。 以下resourceConfig描述了class资源、student资源、activityGroup资源、还有一个描述学生与活动小组关联关系的studentActivityGroupMembership资源。 在student中通过super字段描述了他所属于上级资源为class, 在studentActivityGroupMembership中,通过membership字段描述他所要关联的那两个资源。

// resourceConfig.js

module.exports = {
    // 班级
    "class": {
        rest_api: 'base',
        params: {
            name:{type:'string'},
            description:{type:'string'},
            createdAt: {type:'time'},
            modifiedAt:{type:'time'},
        },
    },
    // 学生
    "student":{
        rest_api: 'base',
        super: 'class',
        params: {
            name:{type:'string'},
            description:{type:'string'},
            createdAt: {type:'time'},
            modifiedAt:{type:'time'},
        },
    },
    // 活动组 (如:学生会、校蓝球队、...等)
    "activityGroup": {
        type: 'membershipContainer',
        rest_api: 'base',
        params: {
            name:{type:'string'},
            description:{type:'string'},
            createdAt: {type:'time'},
            modifiedAt:{type:'time'},
        },
    },
    // 学生与活动小组的关联关系统
    "studentActivityGroupMembership":{
        type: 'membership',
        memberships : ['student','activityGroup'],
        rest_api: 'base',
        params: {
            name:{type:'string'},
            description:{type:'string'},
            createdAt: {type:'time'},
            modifiedAt:{type:'time'},
        },
    }
};

然后server.js中使用rest-router-model

// server.js

const Koa = require('koa');
const restRouterModel = require('rest-router-model');
const resourceConfig = require('./resourceConfig');

let knexConfig = {
    client: 'mysql',
    connection: {
        host : 'localhost',
        user : 'db-user',
        password : 'xxxxxx',
        database : 'SchoolServerDB',
        port : 3306
    }
}
let extendBusinesses = {};        // 扩展业务接口支持
let options = {
    serverName: 'SchoolServer',  // 配置服务的名称
    ip: 'school.server.com',     // 配置服务域名或ip
    port: '3000',                // 配置服务监听端口
};
const app = new Koa();
restRouterModel.koaRestRouter(resourceConfig, extendBusinesses, knexConfig, options).then(koa_router=>{
    app.use(koa_router.routes());
    app.listen(options.port);
});

运行成功过后,插件会在router的中注册,以下REST HTTP接口:

ResourceMethodURI
classPOST/api/:version/classes
classGET/api/:version/classes
classGET/api/:version/classes/:uuid
classPUT,POST/api/:version/classes/:uuid
classDELETE/api/:version/classes/:uuid
studentPOST/api/:version/students /api/:version/classes/:classUUID/students
studentGET/api/:version/students /api/:version/classes/:classUUID/students /api/:version/activityGroups/:activityGroupUUID/students
studentGET/api/:version/students/:uuid /api/:version/classes/:classUUID/students/:uuid
studentPUT,POST/api/:version/students/:uuid /api/:version/classes/:classUUID/students/:uuid
studentDELETE/api/:version/students/:uuid /api/:version/classes/:classUUID/students/:uuid
activityGroupPOST/api/:version/activityGroups
activityGroupGET/api/:version/activityGroups /api/:version/students/:studentUUID/activityGroups
activityGroupGET/api/:version/activityGroups/:uuid
activityGroupPUT,POST/api/:version/activityGroups/:uuid
activityGroupDELETE/api/:version/activityGroups/:uuid
activityGroupPOST/api/:version/activityGroups/:uuid/add
activityGroupPOST/api/:version/activityGroups/:uuid/remove
studentActivityGroupMembershipsPOST/api/:version/studentActivityGroupMemberships
studentActivityGroupMembershipsGET/api/:version/studentActivityGroupMemberships /api/:version/activityGroups/:activityGroupUUID/studentActivityGroupMemberships /api/:version/students/:studentUUID/studentActivityGroupMemberships
studentActivityGroupMembershipsGET/api/:version/studentActivityGroupMemberships/:uuid
studentActivityGroupMembershipsPUT,POST/api/:version/studentActivityGroupMemberships/:uuid
studentActivityGroupMembershipsDELETE/api/:version/studentActivityGroupMemberships/:uuid

待续... ...

1.9.5

2 years ago

1.9.4

3 years ago

1.9.3

3 years ago

1.9.2

4 years ago

1.9.1

4 years ago

1.9.0

4 years ago

1.8.6

4 years ago

1.8.5

4 years ago

1.8.4

4 years ago

1.8.3

5 years ago

1.8.2

5 years ago

1.8.1

5 years ago

1.8.0

5 years ago

1.7.11

5 years ago

1.7.10

5 years ago

1.7.9

5 years ago

1.7.8

5 years ago

1.7.7

6 years ago

1.7.6

6 years ago

1.7.5

6 years ago

1.7.4

6 years ago

1.7.3

6 years ago

1.7.2

6 years ago

1.7.1

6 years ago

1.7.0

6 years ago

1.6.4

6 years ago

1.6.3

6 years ago

1.6.2

6 years ago

1.6.1

6 years ago

1.6.0

6 years ago

1.5.0

6 years ago

1.4.0

6 years ago

1.3.4

6 years ago

1.3.3

6 years ago

1.3.2

6 years ago

1.3.1

6 years ago

1.3.0

6 years ago

1.2.4

6 years ago

1.2.3

6 years ago

1.2.2

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.0

6 years ago