python编写restful接口_Python开发之路系列:RESTful 接口开发
这篇文章我们来看看在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 接口开发相关推荐
- [毕业生的商业软件开发之路]系列文章目录规划
目前[毕业生的商业软件开发之路]系列文章规划出的目录如下,希望靠大家一起完善它,有什么意见欢迎跟帖. 第一章 课程背景 高校毕业生就业问题 高校毕业生就业方式 第二章初入职场 课程说明 关于企业培训 ...
- python flask restful入门_Python Flask高级编程之RESTFul API前后端分离精讲
第1章 随便聊聊 聊聊Flask与Django,聊聊代码的创造性1-1 Flask VS Django 1-2 课程更新维护说明 第2章 起步与红图 本章我们初始化项目,探讨与研究Flask的默认层级 ...
- python做abaqus后处理_python进行abaqus后处理的二次开发,我想提取odb文件中的nodeSet,结果总提示Keyerror,请各位大神指教。...
运行: Cmd中运行:abaqus scrip=plot.py 之所以用python因为abaqus的界面是基于python的,用它来进行批处理或者后处理是比较不错的,希望能和大家分享abaqus的更 ...
- python编写数学公式大全_python - 用python编写数学公式 - 堆栈内存溢出
我正在用python编写此公式. 请查看图片我正在使用以下代码. 它总是会出错. import math import matplotlib matplotlib.use('TkAgg') from ...
- python编写脚本教程_python编写一个会算账的脚本的示例代码
python算账脚本 1.假如小明卡里有10000元去商场买东西发现钱不够又向父母借了5000账单如下 2.以下脚本就能实现上面的运算 from time import strftime import ...
- python编写木马攻击_Python编写简易木马程序
Python编写简易木马程序 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 + ...
- python编写的心得_Python开发之我的小心得
1.文件没有修改这么一说,全部都是直接覆盖. 在python写的时候python会在光标停留的位置直接写,不管之前光标所在的位置有什么信息.这有点类似于windows打字的时候insert键的功能.之 ...
- python编写植物大战僵尸_python开发植物大战僵尸游戏
开发思路 完整项目地址:https://github.com/371854496/... 觉得还OK的话,点下Star,作者不易,thank you! 1.引入需要的模块,配置图片路径,设置界面宽高背 ...
- python编写死循环语句_Python 全栈开发:python循环语句while
while循环 为什么会有循环这种语句? 举一个简单的例子:我们想计算0-100以内偶数的和,这种时候就需要循环这种语句 那有人可能会说:这有什么 0+2+4+.......+98 一样可以计算出来啊 ...
最新文章
- 关于幂律分布的一个笔记_哈克_新浪博客
- sql server 2008学习4 设计索引的建议
- [转载] 新兵训练营系列课程——海量数据存储基础
- 测试反模式冰激凌模式的不足_单元测试反模式,完整列表
- leetcode 28. 实现 strStr()(kmp)
- ios开发之.pch文件的使用
- 【笔记】用正则匹配字符串的方法摘抄
- 谈谈Java虚拟机——Class文件结构
- 爬虫—分析Ajax爬取今日头条图片
- LeetCode26.删除排序数组中的重复项
- 摄影测量前方交会编程实现
- Mac添加Windows共享打印机
- 机械制造技术类毕业论文文献都有哪些?
- rs232 485 ttl区别
- 龙芯电脑usb和硬盘两种方式安装系统
- W3C(万维网联盟)
- UWB DW1000 TWR测距定位功能实现
- 51单片机基础——数码管数组动态显示0—F
- sidekiq任务调度流程分析
- 商场抽奖活动案例,键盘录入,数值拆分,求和,判断