flask編寫RESTful API

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ù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末余素,一起剝皮案震驚了整個(gè)濱河市平酿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喜庞,老刑警劉巖么鹤,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件终娃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蒸甜,警方通過(guò)查閱死者的電腦和手機(jī)棠耕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柠新,“玉大人窍荧,你說(shuō)我怎么就攤上這事『拊鳎” “怎么了蕊退?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我瓤荔,道長(zhǎng)净蚤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任输硝,我火速辦了婚禮塞栅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腔丧。我一直安慰自己,他們只是感情好作烟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布愉粤。 她就那樣靜靜地躺著,像睡著了一般拿撩。 火紅的嫁衣襯著肌膚如雪衣厘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天压恒,我揣著相機(jī)與錄音影暴,去河邊找鬼。 笑死探赫,一個(gè)胖子當(dāng)著我的面吹牛型宙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伦吠,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妆兑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了毛仪?” 一聲冷哼從身側(cè)響起搁嗓,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箱靴,沒(méi)想到半個(gè)月后腺逛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衡怀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年棍矛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狈癞。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茄靠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝶桶,到底是詐尸還是另有隱情慨绳,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站脐雪,受9級(jí)特大地震影響厌小,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜战秋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一璧亚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脂信,春花似錦癣蟋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至埋泵,卻和暖如春幔欧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丽声。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工礁蔗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雁社。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓浴井,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親霉撵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滋饲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容