概括

  1. URL:需要操作的对象,也就是资源
  2. HTTP method:我要对该对象做什么(POST 增、DELETE 删、GET 查、PUT 和 PATCH 改
  3. 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

待续

参考

Flask 学习笔记(二):RESTful API的更多相关文章

  1. ZooKeeper学习笔记二:API基本使用

    Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...

  2. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  3. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  4. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  5. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  6. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  7. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  8. amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules

    amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...

  9. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  10. Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)

    Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享)  点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJK ...

随机推荐

  1. ASP.NET MVC中使用表单上传文件时的注意事项

    最近了好久没写ASP.NET 使用HTML的FORM来上传文件了,结果写了个文件上传发现ASP.NET MVC的Controller中老是读取不到上传的文件. MVC的View(Index.cshtm ...

  2. vue组件原生事件以及路由

    1.组件 组件就是可以扩展HTML元素,封装可重用的HTML代码,可以将组件看作自定义的HTML元素 1.1组件注册 全局注册: 组件注册时,需要给他一个名字,如下: Vue.component('m ...

  3. katalon安装 appium with mac 遇到的坑

    1.             Install Homebrew from Terminal:    /usr/bin/ruby -e "$(curl -fsSL https://raw.gi ...

  4. 每天一个Linux命令(6):rmdir命令

    rmdir命令用来删除空目录 注意:子目录被删除之前应该是空目录.就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录 ...

  5. 解决问题的思路(如故事版里面有东西,却不见了)(swift里面开发比较多)

    解决问题的思路(如故事版里面有东西,却不见了) 正确效果图: 真机效果图: 内容:不见了 解决步骤:(重点讲解方法1) 1.把背景图隐藏了,如果能出现内容,说明背景图把内容遮住了.那怎么办呢,背景图是 ...

  6. iOS之报错“Cannot create __weak reference in file using manual reference counting”解决办法

    解决的办法:在Build Settings--------->Aplle LLVM8.0 - Language - Objectibe-C------------->Weak Refere ...

  7. Webpack4 学习笔记六 多页面配置和devtool

    webpack 多页配置 webpack可以配置单页应用, 也可以配置多页应用. 区别在于, 单页应用entry入口只有一个, 而多页应用入口有多个 webpack配置: const path = r ...

  8. BZOJ 1193--马步距离

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2267  Solved: 1026[Submit][Stat ...

  9. POJ2823 滑动窗口

    滑动最小(最大)值,模版题. 题意:给一个数列,给一个窗口大小k,顺序求每个窗口中最大值和最小值. 和挑战中的例题一模一样,就多了一个求最大,改个大于小于符号就行. 算法是利用双端队列: 以求最小值为 ...

  10. 浅谈localStorage的用法

    今天接到一个任务,说是让自动调节textarea标记的输入高度,而且还要记录下来,下次登录的时候还是调节后的高度,我第一时间就想到了localStorage的用法,直接代码献上: <html l ...