flask编写RESTful API
2019-03-31 本文已影响4人
鱼香土豆丝
REST
REST(Representational State Transfer)是一种架构风格,表述了网络中客户端于服务端的一种交互,REST本身是不实用的,关键的是如何设计它。REST架构就是为了HTTP协议设计的。RESTful web services的核心概念是管理资源。资源是由URIs来表示,客户端使用HTTP当中的'POST,GET, PUT, DELETE'等方法发送请求到服务器,改变相应的资源状态。
![](https://img.haomeiwen.com/i3249797/8dae0fe566b06e6e.png)
REST的六个特性:
- 1.服务器端与客户端分离。
- 2.无状态.
- 3.可缓存
- 4.分层结构
- 5.统一接口
- 6.按需执行代码
flask
Flask是一个基于Python开发的微型web框架,其中Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户。
一个简单的例子:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
使用flask构建REST服务
这里又两种方法构造服务,第一中就是利用flask的路由进行构造,另外一种就是利用flask 的扩展插件来构造。首先我们假定一种业务场景:
做一个最简单的图书馆里系统,实现如下功能
- 图书列表返回
- 返回指定图书的信息(书名,价格,作者)
- 新增一本书
- 删除一本书
- 更新书本的信息(涨价了)
了解过HTTP的都了解这该如何做,那么使用flask 会怎么构造服务呢?又两种办法1. 利用路由写。2.利用flask的扩展插件写接卸来就开始介绍这两种方法如何实现吧!
利用路由实现功能
在实现之前可以使用postman 对接口进行测试
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
}
]
@app.route('/bookstore/api/v1/books', methods=['GET'])
def get_tasks():
return jsonify({'books': books})
@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)
@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}), 201
@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)
@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(debug=True)
获取所有的书列表
获取指定书的信息
新增一本书
更新信息
删除书籍
利用flask的插件编写
未完待续