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

来源:互联网 发布:淘宝电视机价格 编辑:程序博客网 时间:2024/06/07 22:46

Trump 设计文档

原则

DRY

依赖关系

sanic

asyncpg

配置

用户表: _user

地区表: area

外部接口

查询(Query)

列表

/<table|view>

单项

/<table|view>/<id>

查询条件

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

相等
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块,对指定表实现单条,批量插入

语法:

/<tablename>

单条插入JSON:

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

批量插入JSON:

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

删除(Delete)

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

语法:

/<tablename>/<id>

修改(Modify)

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

语法:

/<tablename>/<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','....'},                              ##以逗号分割可指定多个角色                                                       },                    ##以逗号分割可指定多个表名`

生命周期

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

请求

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

pre_process

/<table|alias>.py定义的process方法       

pre_process

/<table|view|alias>.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

/<table|alias>.py,定义的ls/put/post/delete方法

./post_process

/<table|view|alias>.py,定义的process方法    注:上面的四步都可以直接return到此,此方法不能直接return,    若需要修改返回数据可直接修改response对象    始终都会被执行

返回数据

0 0
原创粉丝点击