REST
REST(Representational State Transfer)是一種架構(gòu)風(fēng)格溢吻,表述了網(wǎng)絡(luò)中客戶端于服務(wù)端的一種交互,REST本身是不實(shí)用的,關(guān)鍵的是如何設(shè)計(jì)它促王。REST架構(gòu)就是為了HTTP協(xié)議設(shè)計(jì)的犀盟。RESTful web services的核心概念是管理資源。資源是由URIs來(lái)表示蝇狼,客戶端使用HTTP當(dāng)中的'POST,GET, PUT, DELETE'等方法發(fā)送請(qǐng)求到服務(wù)器阅畴,改變相應(yīng)的資源狀態(tài)。
REST的六個(gè)特性:
- 1.服務(wù)器端與客戶端分離迅耘。
- 2.無(wú)狀態(tài).
- 3.可緩存
- 4.分層結(jié)構(gòu)
- 5.統(tǒng)一接口
- 6.按需執(zhí)行代碼
flask
Flask是一個(gè)基于Python開發(fā)的微型web框架贱枣,其中Werkzeug本質(zhì)是Socket服務(wù)端,其用于接收http請(qǐng)求并對(duì)請(qǐng)求進(jìn)行預(yù)處理颤专,然后觸發(fā)Flask框架纽哥,開發(fā)人員基于Flask框架提供的功能對(duì)請(qǐng)求進(jìn)行相應(yīng)的處理,并返回給用戶栖秕。
一個(gè)簡(jiǎn)單的例子:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
使用flask構(gòu)建REST服務(wù)
這里又兩種方法構(gòu)造服務(wù)春塌,第一中就是利用flask的路由進(jìn)行構(gòu)造,另外一種就是利用flask 的擴(kuò)展插件來(lái)構(gòu)造累魔。首先我們假定一種業(yè)務(wù)場(chǎng)景:
做一個(gè)最簡(jiǎn)單的圖書館里系統(tǒng)摔笤,實(shí)現(xiàn)如下功能
- 圖書列表返回
- 返回指定圖書的信息(書名,價(jià)格垦写,作者)
- 新增一本書
- 刪除一本書
- 更新書本的信息(漲價(jià)了)
了解過(guò)HTTP的都了解這該如何做吕世,那么使用flask 會(huì)怎么構(gòu)造服務(wù)呢?又兩種辦法1. 利用路由寫梯投。2.利用flask的擴(kuò)展插件寫接卸來(lái)就開始介紹這兩種方法如何實(shí)現(xiàn)吧命辖!
利用路由實(shí)現(xiàn)功能
在實(shí)現(xiàn)之前可以使用postman 對(duì)接口進(jìn)行測(cè)試
from flask import Flask, jsonify, abort, request
app = Flask(__name__)
books = [
{
'id': 1,
'title': u'論語(yǔ)',
'auther': u'孔子',
'price': 18
},
{
'id': 2,
'title': u'道德經(jīng)',
'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的插件編寫
未完待續(xù)