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
- Trump 是一个通过数据库自动发现生成 RESTful 风格接口的框架。
- Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
- ubuntu 下面通过maven搭建restful风格的jersey框架
- Restful风格的接口设计
- RestFul风格的接口的使用
- RestFul风格WebService接口的定义
- Restful是一种非常优美的http接口设计风格及设计规范
- restful接口风格
- RESTful风格接口
- restful风格接口
- RESTful风格的Web服务框架 Swagger
- 类似restful风格的网络请求框架
- Restful风格的SSM框架搭建
- RESTful风格的SSM框架搭建
- SpringBoot-创建RESTful风格的 http接口访问jpa 来操作数据库
- RestKit ,一个用于更好支持RESTful风格服务器接口的iOS库
- Swagger 一款RESTFUL接口的文档在线自动生成+功能测试功能软件
- 一款RESTFUL接口的文档在线自动生成+功能测试功能软件——Swagger简介
- 使用matlab对训练样本图像降维,并对测试图像使用变换矩阵降维并重构
- MTK SmartPhone Record-(1)
- swift修改UITextfield的Placeholder字体大小和颜色
- Ucenter通信失败(终极解决)
- 一些很不错的Android开发技巧
- Trump 是一个通过数据库自动发现生成 RESTful 风格接口的框架。
- 使用Tensorflow训练自己的分割数据
- 如何设计一款多场景分布式发号器(Vesta)
- Struts2入门
- 第一次写博客
- Tensorflow之创建我的第一个神经网络
- Redis 高可用方案 Redis Sentinel(后期补)
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
- 剑指offer系列----求double类型的base的exponent次方