Flask 学习笔记(二):RESTful API
概括
- URL:需要操作的对象,也就是资源
- HTTP method:我要对该对象做什么(POST 增、DELETE 删、GET 查、PUT 和 PATCH 改)
- HTTP status code:操作的结果
做到这个,就达成了 REST 的第二层。
视图的定义方式
一般视图都使用 app.route() 装饰器定义,但是这种方式显然不适合用于定义 restful api.
对于 restful 场景,flask 提供了 MethodView 类,可以用基于类的方法来定义视图函数:
class HttpMethodExample(MethodView):
def get(self):
return 'Send request with `GET` method'
def post(self):
return 'Send request with `POST` method'
def put(self):
return 'Send request with `PUT` method'
def patch(self):
return 'Send request with `PATCH` method'
def delete(self):
return 'Send request with `DELETE` method'
# 基于 MethodView 构造视图函数
example_view = HttpMethodExample.as_view('http_method_example2')
# 为该视图函数添加 url 规则
app.add_url_rule('/http-method-test2/', view_func=example_view)
flask 还提供了 jsonify 与 request.get_json() 用于序列化与反序列化数据。
flask-rest-api
搜了一番 flask rest 库,发现比较流行的有 flask-restful、flask-restplus、flask-restless 等,刚开始打算用 flask-restplus,因为它能自动生成 swagger api 文档。
但是发现它的 schema 是用类似 argparser 的方法做的,而且整个响应解析模块,在新版将被移除,官方推荐用 marshmallow,但是这方面的资料很少。于是又重做打算。
找了一圈,最后找到个 flask-rest-api,这个模块使用 marshmallow 定义 schema,用 webargs 解析参数,用 apispec 生成 api 文档。虽然 stars 比较少,但是开发者正是 marshmallow 等几个流行库的 co-leader,感觉是有保障的。
当然新 lib 可能会遇到 bug,但是一是开发者很活跃,issue 基本都能很快得到回复,二是我当下做的也是个个人项目,真出点小毛病问题也不大。
于是就选择了它。这个库的 docs 写得很清晰易懂,而且显然很新手友好,这是我看中它的原因。目前正在使用它开发我的新项目。笔记就。。写完再说吧。项目都跑不动,就写笔记,感觉也不太靠谱。。。
画外 GraphQL
待续
参考
- 怎样用通俗的语言解释REST,以及RESTful? - 知乎
- 如何给老婆解释什么是RESTful? - 知乎
- Github API - v3
- PayPal API
- flask-rest-api: build a REST API on Flask using Marshmallow
Flask 学习笔记(二):RESTful API的更多相关文章
- ZooKeeper学习笔记二:API基本使用
Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- springmvc学习笔记(19)-RESTful支持
springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...
- amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules
amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)
Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享) 点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJK ...
随机推荐
- ASP.NET MVC中使用表单上传文件时的注意事项
最近了好久没写ASP.NET 使用HTML的FORM来上传文件了,结果写了个文件上传发现ASP.NET MVC的Controller中老是读取不到上传的文件. MVC的View(Index.cshtm ...
- vue组件原生事件以及路由
1.组件 组件就是可以扩展HTML元素,封装可重用的HTML代码,可以将组件看作自定义的HTML元素 1.1组件注册 全局注册: 组件注册时,需要给他一个名字,如下: Vue.component('m ...
- katalon安装 appium with mac 遇到的坑
1. Install Homebrew from Terminal: /usr/bin/ruby -e "$(curl -fsSL https://raw.gi ...
- 每天一个Linux命令(6):rmdir命令
rmdir命令用来删除空目录 注意:子目录被删除之前应该是空目录.就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录 ...
- 解决问题的思路(如故事版里面有东西,却不见了)(swift里面开发比较多)
解决问题的思路(如故事版里面有东西,却不见了) 正确效果图: 真机效果图: 内容:不见了 解决步骤:(重点讲解方法1) 1.把背景图隐藏了,如果能出现内容,说明背景图把内容遮住了.那怎么办呢,背景图是 ...
- iOS之报错“Cannot create __weak reference in file using manual reference counting”解决办法
解决的办法:在Build Settings--------->Aplle LLVM8.0 - Language - Objectibe-C------------->Weak Refere ...
- Webpack4 学习笔记六 多页面配置和devtool
webpack 多页配置 webpack可以配置单页应用, 也可以配置多页应用. 区别在于, 单页应用entry入口只有一个, 而多页应用入口有多个 webpack配置: const path = r ...
- BZOJ 1193--马步距离
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2267 Solved: 1026[Submit][Stat ...
- POJ2823 滑动窗口
滑动最小(最大)值,模版题. 题意:给一个数列,给一个窗口大小k,顺序求每个窗口中最大值和最小值. 和挑战中的例题一模一样,就多了一个求最大,改个大于小于符号就行. 算法是利用双端队列: 以求最小值为 ...
- 浅谈localStorage的用法
今天接到一个任务,说是让自动调节textarea标记的输入高度,而且还要记录下来,下次登录的时候还是调节后的高度,我第一时间就想到了localStorage的用法,直接代码献上: <html l ...