这篇文章我们来看看在Flask里是如何进行RESTful接口开发的

按照我个人的理解,RESTful的核心价值再与它的规范性。

RESTful接口是面向资源的, 而不是面向动作。

比如一个查书的接口,如果是面向动作的风格,可能是这样的:

/getBook?name=?...

这很好,一目了然。

但是在增加书,修改书,删除书就是这样了:

/addBook

/editBook

/deleteBook

和你对接的前端同事也许会记住这些名字,但是也有可能记错

比如 /deleteBook 记成 /delBook

如果记性好,也没关系,才四个接口。

但是如果对数学书写一些接口呢? 烹饪书呢?你可能会看到这些接口:

/getCookBook

/get-cook-book

/getMathBook

/get-math-book

/getMathematicsBook

/addCookBook

/addRecipe

/edit-a-cook-book

/search-meth-book

/delete-a-math-book

/delmathbook

...... // 无尽的痛苦

或者是由于某些原因后台可能会改这些接口名,导致前后端不一致,增加沟通成本,浪费时间

随着资源增多(除了书你还有其他资源),接口数量成倍增长,如果没有一种统一风格,可以想象接口是多么混乱。

而使用了RESTful风格接口,接口应该是这样的:

/api/v1/books/math/ [GET,PUT,POST,DELETE]

/api/v1/books/cook/ [GET,PUT,POST,DELETE]

自解释并且优雅。

扯的太远了,还是那句话,不了解RESTful风格的通知请面壁然后去百度。

咱们看看怎么用Flask来实现一个最简单的RESTful接口

新建脚本 book.py

from flask import Flask

from flask import request # 导入request对象

book_app = Flask(__name__)

@book_app.route('/books' , methods = ['GET','POST']) # 这个函数允许GET和POST,其他动作不允许

def book_interface():

if request.method == 'GET': # 判断动作

return 'get a book'

if request.method == 'POST':

return 'POST'

if __name__ == '__main__':

book_app.run(host='0.0.0.0', port=27016, debug='true')

其实这种代码的缺点在于判断分支多,缺乏可读性。因为HTTP动词常用得上的大概有5种:GET POST PUT DELETE PATCH。

下面我们来看一下如果是使用flask提供的restful包是怎样写的

cat.py

from flask import Flask

from flask_restful import Resource, Api

cat_app = Flask(__name__) # 初始化Flask对象

cat_api = Api(cat_app) # 初始化Api对象

class Cat(Resource):

def get(self, cat_id): # GET方法

return 'get a cat %s:' % cat_id

def post(self): # POST方法

return 'post a cat'

cat_api.add_resource(Cat, '/cats/') # 将Cat资源注册

if __name__ == '__main__':

cat_app.run(host='0.0.0.0', port=27016, debug='true')

显然这样的写法更加优雅。

将RESTful资源添加到蓝图中:

from flask import Blueprint

from flask_restful import Resource, Api

cat_blueprint = Blueprint('cats', __name__) # 用Blueprint构造函数替代Flask构造函数

cat_api = Api(cat_blueprint)

class Cat(Resource):

def get(self, cat_id):

return 'get a cat %s:' % cat_id

def post(self):

return 'post a cat'

cat_api.add_resource(Cat, '/cats/')

然后在app包的init脚本里导入cat_blueprint并注册就OK了:

_ init _.py:

from cat import cat_blueprint

from flask import Flask

app = Flask(__name__)

app.register_blueprint(cat_blueprint, url_prefix='/api/v3')

总结: 到目前为止的Python系列文章,我们可以总结一些Python和Flask的特点:

可以导入任何东西,变量、函数、类 都可以。

到目前为止没有写过一行配置代码。而使用Spring的时候,至少得花时间去维护你的Pom.xml

Flask只提供最小模块。当你想用restful的时候,Flask只是提供了一种类的写法而已,至于SQL ORM这些你需要自己去找其他包来搞定。而SpringBoot提供了Spring Data JPA:从HTTP请求到ORM完成增删改查的整套体系。

下一篇文章我们来学习Python里比较流行的ORM: SQLAlchemy

python编写restful接口_Python开发之路系列:RESTful 接口开发相关推荐

  1. [毕业生的商业软件开发之路]系列文章目录规划

    目前[毕业生的商业软件开发之路]系列文章规划出的目录如下,希望靠大家一起完善它,有什么意见欢迎跟帖. 第一章 课程背景 高校毕业生就业问题 高校毕业生就业方式 第二章初入职场 课程说明 关于企业培训 ...

  2. python flask restful入门_Python Flask高级编程之RESTFul API前后端分离精讲

    第1章 随便聊聊 聊聊Flask与Django,聊聊代码的创造性1-1 Flask VS Django 1-2 课程更新维护说明 第2章 起步与红图 本章我们初始化项目,探讨与研究Flask的默认层级 ...

  3. python做abaqus后处理_python进行abaqus后处理的二次开发,我想提取odb文件中的nodeSet,结果总提示Keyerror,请各位大神指教。...

    运行: Cmd中运行:abaqus scrip=plot.py 之所以用python因为abaqus的界面是基于python的,用它来进行批处理或者后处理是比较不错的,希望能和大家分享abaqus的更 ...

  4. python编写数学公式大全_python - 用python编写数学公式 - 堆栈内存溢出

    我正在用python编写此公式. 请查看图片我正在使用以下代码. 它总是会出错. import math import matplotlib matplotlib.use('TkAgg') from ...

  5. python编写脚本教程_python编写一个会算账的脚本的示例代码

    python算账脚本 1.假如小明卡里有10000元去商场买东西发现钱不够又向父母借了5000账单如下 2.以下脚本就能实现上面的运算 from time import strftime import ...

  6. python编写木马攻击_Python编写简易木马程序

    Python编写简易木马程序 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 + ...

  7. python编写的心得_Python开发之我的小心得

    1.文件没有修改这么一说,全部都是直接覆盖. 在python写的时候python会在光标停留的位置直接写,不管之前光标所在的位置有什么信息.这有点类似于windows打字的时候insert键的功能.之 ...

  8. python编写植物大战僵尸_python开发植物大战僵尸游戏

    开发思路 完整项目地址:https://github.com/371854496/... 觉得还OK的话,点下Star,作者不易,thank you! 1.引入需要的模块,配置图片路径,设置界面宽高背 ...

  9. python编写死循环语句_Python 全栈开发:python循环语句while

    while循环 为什么会有循环这种语句? 举一个简单的例子:我们想计算0-100以内偶数的和,这种时候就需要循环这种语句 那有人可能会说:这有什么 0+2+4+.......+98 一样可以计算出来啊 ...

最新文章

  1. 关于幂律分布的一个笔记_哈克_新浪博客
  2. sql server 2008学习4 设计索引的建议
  3. [转载] 新兵训练营系列课程——海量数据存储基础
  4. 测试反模式冰激凌模式的不足_单元测试反模式,完整列表
  5. leetcode 28. 实现 strStr()(kmp)
  6. ios开发之.pch文件的使用
  7. 【笔记】用正则匹配字符串的方法摘抄
  8. 谈谈Java虚拟机——Class文件结构
  9. 爬虫—分析Ajax爬取今日头条图片
  10. LeetCode26.删除排序数组中的重复项
  11. 摄影测量前方交会编程实现
  12. Mac添加Windows共享打印机
  13. 机械制造技术类毕业论文文献都有哪些?
  14. rs232 485 ttl区别
  15. 龙芯电脑usb和硬盘两种方式安装系统
  16. W3C(万维网联盟)
  17. UWB DW1000 TWR测距定位功能实现
  18. 51单片机基础——数码管数组动态显示0—F
  19. sidekiq任务调度流程分析
  20. 商场抽奖活动案例,键盘录入,数值拆分,求和,判断

热门文章

  1. 2022年全球市场通信专用逻辑IC总体规模、主要生产商、主要地区、产品和应用细分研究报告
  2. 关于TCP/IP通信协议的一些见解
  3. 静态最优期货价差套利头寸比例估计(静态最优期货价差套利头寸比例估计是多少)
  4. arp病毒的预防与查杀
  5. PHP加速文件下载,文件下载加速
  6. iOS导出ipa安装失败(非证书与手机原因)
  7. 【CS】客户端更新(一)——更新程序文件方式
  8. 获得研究生学历的6种方式
  9. Python获取[2016年统计用区划代码和城乡划分代码(截止2016年07月31日)]
  10. 实现Excel文件xls与xlsx格式批量互相转换