Python Flask:利用路由写RESTful API
来自CloudWiki
目录
功能简介
这里又两种方法构造服务,第一中就是利用flask的路由进行构造,另外一种就是利用flask 的扩展插件来构造。首先我们假定一种业务场景: 做一个最简单的图书馆里系统,实现如下功能
返回图书列表 返回指定图书的信息(书名,价格,作者) 新增一本书: (POST方法) 删除一本书 :(DELETE方法) 更新书本的信息(涨价了)
使用flask构建REST服务
了解过HTTP的都了解这该如何做,那么使用flask 会怎么构造服务呢?又两种办法
1. 利用路由写。
2.利用flask的扩展插件写接卸来就开始介绍这两种方法如何实现吧!
接口列表
图书列表返回 :(GET方法)/bookstore/api/v1/books 返回指定图书的信息(书名,价格,作者):(GET方法) /bookstore/api/v1/books/<int:id> 新增一本书: (POST方法)/bookstore/api/v1/books/ 删除一本书 :(DELETE方法)/bookstore/api/v1/books/<int:id> 更新书本的信息(涨价了):(PUT方法)/bookstore/api/v1/books/<int:id>
代码
from flask import Flask, jsonify, abort, request app = Flask(__name__) books = [ { 'id': 1, 'title': u'论语', 'auther': u'孔子', 'price': 18 }, { 'id': 2, 'title': u'道德经', 'auther': u'老子', 'price': 15 } ] #find all books,GET操作 @app.route('/bookstore/api/v1/books', methods=['GET']) def get_tasks(): return jsonify({'books': books}) #get one specific book,GET操作 @app.route('/bookstore/api/v1/books/<int:id>', methods=['GET']) def get_task(id): for book in books: if book['id']==id: return jsonify({'book': book}) abort(404) #insert a new book,POST操作 @app.route('/bookstore/api/v1/books/', methods=['POST']) def create_task(): if not request.form or not 'title' in request.form: abort(400) book = { 'id': books[-1]['id'] + 1, 'title': request.form['title'], 'auther': request.form['auther'], 'price': request.form['price'], } books.append(book) return jsonify({'book': book}) #update a book,PUT操作 @app.route('/bookstore/api/v1/books/<int:id>', methods=['PUT']) def update_book(id): for book in books: if book['id']==id: book["title"] = request.form['title'] book["auther"] = request.form['auther'] book["price"] = request.form['price'] return jsonify({'books': books}) abort(400) #delete a book,DELETE操作 @app.route('/bookstore/api/v1/books/<int:id>', methods=['DELETE']) def delete_task(id): for book in books: if book['id']==id: books.remove(book) return jsonify({'result': True}) abort(404) return jsonify({'result': True}) if __name__ == '__main__': app.run(host='0.0.0.0',debug=True)
测试
测试工具:
浏览器
只能针对GET请求:
浏览器输入 http://121.36.58.65:5000/bookstore/api/v1/books
显示:
{ "books": [ { "auther": "\u5b54\u5b50", "id": 1, "price": 18, "title": "\u8bba\u8bed" }, { "auther": "\u8001\u5b50", "id": 2, "price": 15, "title": "\u9053\u5fb7\u7ecf" } ] }
API POST 或 POSTMAN
POST请求
参见: https://blog.csdn.net/weixin_44159454/article/details/108467380