Trump 是一个通过数据库自动发现生成 RESTful 风格接口的框架。

Trump 设计文档

原则

DRY

依赖关系

sanic

asyncpg

配置

用户表: _user

地区表: area

外部接口

查询(Query)

列表

/

单项

//

查询条件

作为参数传入,和字段以 - 分隔

相等
field=value
不等
filed-ne=value
大于
filed-gt=value
小于
filed-lt=value
在….之中
field-in=value1,value2..
包含
filed-contains=value
区间
field-range=min_value|max_value

大于或小于其中一个值为空,不可全为空

分页及排序
page=?&pagesize=?

增加(Add)

以POST传输方式传入JSON块,对指定表实现单条,批量插入

语法:

/

单条插入JSON:

{"field":"values",...}##以逗号分割可传入多个表字段

批量插入JSON:

    [
     {"field1":"values1","field2":"values2",...},
         ##以逗号结尾可传入多条数据
     {"field1":"values1","field2":"values2",...}
    ]

删除(Delete)

以DELETE请求,用id对指定表实现单条数据删除

语法:

//

修改(Modify)

以PUT传输方式传入json块,用id对指定表实现数据修改

语法:

//

修改JSON:

{"field":"values",...}##以逗号分割可传入多个表字段

内部接口

查询(Query)

多条查询(Items)

get_items(db, tablename, args={}, roles=['DEFAULT'],with_total=False, pager=False)

@param:
##db:传入已注册数据库链接(app.pool)
##tablename:传入表名
##args: 传入查询条件 >,<,!=.....
##roles:传入当前登录用户角色
##with_total:传入是否统计条数
##pager:传入是否进行分页

@return:list[]

单条查询(Item)

get_item(db, tablename, oid, roles=[], column='id')

@param:
##db:传入已注册数据库链接池app.pool
##tablename:传入表名
##oid:传入表id
##roles:传入当前登录用户角色
##column:指定条件字段

增加(Add)

单条插入,批量插入

create_item(db, tablename, data, column='id', lock_table=False)

@param:
##db:传入已注册数据库链接
##tablename:传入表名
##data:传入插入数据集合
##column:传入返回值(插入成功后返回该列值)
##lock_table:是否进行锁表操作

删除(Delete)

delete_item(db, tablename, oid)

@param:
##db:传入已注册数据库链接
##tablename:传入表名
##oid:传入表id

修改(Modify)

modify_item(db, tablename, oid, data)

@param
##db:传入已注册数据库链接
##tablename:传入表名
##oid:传入表id
##data:传入修改数据

用户

提供多种登录选项:cookie/session,header

用户信息可通过 request.user 获取

用户信息包括:是否登录,用户角色

地区

地区由一个32位整数表示

0000|0000000|000000|00000000|0000000
国家 省      市     区       街道

其中中国为1

通过位运算可以得到当前行政区级别和从属关系

前处理,后处理

在 pre_process 和 post_process 目录里,以接口命名。

前处理[pre_process]

  处理请求URL,对参数进行处理

后处理[post_process]

  在返回数据之前对数据进行处理

通过API建表

设置

语法:

bp.settings = {
'NO_PAGER_API': ['TABLENAME','.....'],
'ANONYMOUS_API': ['TABLENAME','....'],
'ACL_MODE': 'WHITE_LIST/BLACK_LIST',
'ACL': {
    "TABLENAME": {
        "LS/GET/PUT/POST/...": {"ROLENAME","..."}
    },

框架内默认对数据进行分页(每页10条记录),可通过

[NO_PAGER_API]

指定表名取消分页

'NO_PAGER_API': ['TABLENAME'],

### [ANONYMOUS_API]
表操作默认登录,此字段指定表名免登录,

黑白名单对该字段指定表名失效,

该字段默认为空,为空时,所有表权限开放,黑白名单失效

'ANONYMOUS_API': ['TABLENAME'],

[ACL_MODE]

指定黑白名单模式

BLACK_LIST(黑名单模式):无法操作ACL内指定表,但可操作其他表

WHITE_LIST(白名单模式):可以操作ACL内指定表,但不可操作其他表

'ACL_MODE': 'BLACK_LIST/WHITE_LIST',
'ACL': {
    'TABLE': {
        "LS/GET/PUT/POST/...":{'ROLENAME','....'},
             },

### [ACL]
指定表CRUD操作权限,配合黑白名单使用

'ACL': {
        'TABLE': {
            "LS/GET/PUT/POST/...":{'ROLENAME','....'},  
                            ##以逗号分割可指定多个角色                                      
                 },
                    ##以逗号分割可指定多个表名`

生命周期

执行的流程:请求-前处理-数据操作-后处理-返回数据
![流程图](https://img-blog.csdn.net/20170412131443259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFueWFqaWFv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

请求

ip:端口号/api/v1/接口名(表名)

pre_process

/.py定义的process方法       

pre_process

/.py定义的ls/put/post/delete方法
    注:视图优先,如果是表名,对其进行处理,tables中是所有的视图,
    先去视图中进行查询,如果不在tables中,返回404
    sync def ls(request, name):
        name = name+'_view' 

CRUD

get_item/get_items/create_item/modify_item/delete_item

./post_process

/.py,定义的ls/put/post/delete方法

./post_process

/.py,定义的process方法

    注:上面的四步都可以直接return到此,此方法不能直接return,
    若需要修改返回数据可直接修改response对象
    始终都会被执行

返回数据

你可能感兴趣的:(Trump 是一个通过数据库自动发现生成 RESTful 风格接口的框架。)