在使用 Flask 开发 web 接口时,设计到简单 RESTful 风格接口,使用 Restless 插件会非常方便,只需要几行代码就可以搞定一个服务器接口
下载
1 | $ pip install Flask-Restless |
快速开始
编辑 run.py
1 | #!/usr/bin/env python |
启动
1 | $ python run.py |
POST
创建
1 | $ curl -X POST localhost:5000/api/book -H "Content-Type:application/json" -d '{"name":"wxnacy"}' |
1 | { |
GET
查看列表
1 | curl localhost:5000/api/book |
1 | { |
查看单个
1 | $ curl localhost:5000/api/book/96 |
1 | { |
PUT
1 | $ curl -X PUT localhost:5000/api/book/96 -H "Content-Type:application/json" -d '{"name":"new_name"}' |
1 | { |
DELETE
1 | $ curl -X DELETE localhost:5000/api/book/96 |
看,几行代码就搞定了增删改查四大功能,如果你只是搭个自己的小服务,这就已经足够了,再也不用吭哧吭哧写代码了,关于 Methods 的更多解释见文档
修改地址前缀
1 | manager.create_api(Book, url_prefix='/api/v2', methods=['GET']) |
在 create_api
的时候作如上改动,就可以修改接口前缀
1 | $ curl localhost:5000/api/v2/book |
搜索请求
Restless 非常强大的功能是,他可以在不改动代码的情况下做基于数据的条件查询
1 | curl \ |
1 | { |
什么代码都没动,就完成 like
的查询的操作,妈妈再也不用担心我写 API 了
请求格式
1 | {"name": <fieldname>, "op": <operatorname>, "val": <argument>} |
或
1 | {"name": <fieldname>, "op": <operatorname>, "field": <fieldname>} |
fieldname
是字段名,operatorname
是查询条件,argument
是条件值,通过不同的 op
值来完成相应操作,更多的 Operators 值
- ==, 371032668@qq.com, equals, equals_to
- !=, neq, does_not_equal, not_equal_to
>, gt, <, lt
>=, ge, gte, geq, <=, le, lte, leq
- in, not_in
- is_null, is_not_null
- like
- has
- any
更多用法见文档
方法求值
Restless 另一个比较牛逼的功能,是可以使用数据库的函数,比如
1 | $ curl localhost:5000/api/eval/book?q={"functions": [{"name": "count", "field": "id"}]} |
1 | {"count__id": 94} |
就这样,我们得到了数据总和,不过这个功能默认是不打开的,需要设置 allow_functions
手动打开
1 | manager.create_api(Book, allow_functions=True, methods=['GET', 'POST', 'PUT', 'DELETE']) |
更多介绍见文档
JSONP
Restless 默认支持 JSONP,使用正常访问方式即可
1 | $ curl localhost:5000/api/book/10?callback=foo |
1 | foo({"data": {"id": 10, "name": "wxnacy"}, "meta": {"Content-Type": "application/javascript", "status": 200}}) |
参考
最近热读
扫码关注公众号,或搜索公众号“温欣爸比”
及时获取我的最新文章
