Python Flask RESTful使用demo演示
一、RESTful 概述
REST(Representational State Transfer)風(fēng)格是一種面向資源的 Web 應(yīng)用程序設(shè)計風(fēng)格,它遵循一些設(shè)計原則,使得 Web 應(yīng)用程序具有良好的可讀性、可擴(kuò)展性和可維護(hù)性。下面我們來詳細(xì)解釋一下 RESTful 風(fēng)格的各個方面:
- 資源標(biāo)識符:在 RESTful 風(fēng)格中,每個資源都有一個唯一的標(biāo)識符,通常是一個
URL(Uniform Resource Locator)
。URL 用于標(biāo)識資源的位置,使得客戶端可以使用 HTTP 協(xié)議進(jìn)行訪問。例如,一個簡單的 URL 可以是:http://example.com/products/123
,其中“products”
表示資源類型,“123”
表示資源標(biāo)識符。 - 表示層:資源可以以不同的格式表示,例如
JSON
,XML
,HTML
等??蛻舳丝梢愿鶕?jù)需要選擇適當(dāng)?shù)谋硎拘问竭M(jìn)行交互。例如,一個RESTful API
可以返回JSON
格式的數(shù)據(jù),以便客戶端可以更容易地解析和處理數(shù)據(jù)。 - 自描述消息:每個消息都應(yīng)該包含足夠的信息,以描述如何處理該消息。例如,HTTP 響應(yīng)應(yīng)該包含狀態(tài)碼、響應(yīng)頭和響應(yīng)正文等信息,以便客戶端可以理解響應(yīng)的含義。
- 無狀態(tài)通信:
RESTful
風(fēng)格的設(shè)計強(qiáng)調(diào)無狀態(tài)通信,這意味著每個請求都應(yīng)該包含所有必要的信息以處理該請求,而不依賴于先前的請求。這可以使得 Web 應(yīng)用程序更加簡單和可擴(kuò)展,因為服務(wù)器不需要保留任何狀態(tài)信息。 - 統(tǒng)一接口:所有資源應(yīng)該通過相同的接口來訪問。這意味著客戶端可以使用相同的 HTTP 方法(如
GET
、POST
、PUT
、DELETE
等)來操作不同類型的資源。這使得 API 更加簡單和一致,并且更容易被其他開發(fā)者理解和使用。
總之,RESTful 風(fēng)格的設(shè)計使得 Web 應(yīng)用程序更加靈活、可擴(kuò)展和易于維護(hù),是一種現(xiàn)代化的 Web 應(yīng)用程序設(shè)計方式。
RESTful 官網(wǎng):restfulapi.net/
二、Python 中的 RESTful
Python 可以用于實現(xiàn) RESTful 風(fēng)格的 Web 應(yīng)用程序,通常使用一些 Web 框架來簡化開發(fā)過程。下面是一些常見的 Python Web 框架:
Flask
:Flask
是一個簡單、輕量級的 Web 框架,可以用來構(gòu)建 RESTful 風(fēng)格的 Web 應(yīng)用程序。它使用 Python 的裝飾器語法來定義 HTTP 路由,使得編寫 Web 應(yīng)用程序變得簡單和直觀。Flask 還提供了擴(kuò)展機(jī)制,使得開發(fā)人員可以輕松地添加新的功能,例如數(shù)據(jù)庫訪問、表單驗證等。Django
:Django
是一個功能強(qiáng)大、全面的 Web 框架,可以用于構(gòu)建復(fù)雜的 Web 應(yīng)用程序。它提供了許多內(nèi)置功能,例如ORM
(對象關(guān)系映射)、表單驗證、身份驗證等,可以使開發(fā)人員更快地構(gòu)建 Web 應(yīng)用程序。Django 也支持RESTful
風(fēng)格的 Web 應(yīng)用程序開發(fā),可以使用第三方庫Django REST framework
來實現(xiàn)。Bottle
:Bottle
是一個輕量級的 Web 框架,它使用 Python 的裝飾器語法來定義 HTTP 路由,可以快速構(gòu)建 RESTful 風(fēng)格的 Web 應(yīng)用程序。Bottle 還包含了一些有用的功能,例如模板引擎、數(shù)據(jù)庫訪問、靜態(tài)文件處理等。Pyramid
:Pyramid
是一個靈活、高度可定制的 Web 框架,可以用于構(gòu)建各種類型的 Web 應(yīng)用程序,包括 RESTful 風(fēng)格的 Web 應(yīng)用程序。Pyramid 提供了許多擴(kuò)展機(jī)制,使得開發(fā)人員可以輕松地添加新的功能,例如數(shù)據(jù)庫訪問、表單驗證、身份驗證等。
以上框架都支持 RESTful 風(fēng)格的 Web 應(yīng)用程序開發(fā),并且都具有各自的優(yōu)缺點,開發(fā)人員可以根據(jù)自己的需求選擇合適的框架。
三、Flask RESTful API 示例講解
1)Flask-RESTful 庫講解
Flask-RESTful 是一個基于 Flask 的擴(kuò)展庫,它提供了一些方便的工具來構(gòu)建 RESTful API。下面是 Flask-RESTful 的一些主要特點和功能:
- 資源類:Flask-RESTful 提供了一個 Resource 基類,可以用來創(chuàng)建資源。Resource 類包含了 HTTP 方法(
GET
、POST
、PUT
、DELETE
等)的處理邏輯,并提供了一些方便的方法來處理請求和響應(yīng)。 - 請求參數(shù)解析:Flask-RESTful 提供了一個
RequestParser
類,用于解析請求參數(shù)。RequestParser
可以自動將查詢參數(shù)、表單參數(shù)、JSON 參數(shù)等解析成 Python 類型,并提供了一些選項來指定參數(shù)的類型、默認(rèn)值、必須存在等限制條件。 - 響應(yīng)格式化:Flask-RESTful 提供了一個
marshal_with()
裝飾器,用于格式化響應(yīng)數(shù)據(jù)。marshal_with()
裝飾器可以將 Python 對象轉(zhuǎn)換成指定的輸出格式(如 JSON、XML 等),并支持指定輸出字段、字段類型、嵌套字段等功能。 - 路由定義: Flask-RESTful 提供了一個
Api
類,用于定義路由和資源的映射關(guān)系。Api 類包含了add_resource()
方法,用于將資源類和 URL 路由綁定起來。 - 異常處理:Flask-RESTful 提供了一些異常類,用于處理 HTTP 請求和響應(yīng)中的錯誤。Flask-RESTful 的異常類包括
abort
、HTTPException
等,可以方便地處理 HTTP 狀態(tài)碼、錯誤信息等。
綜上所述,F(xiàn)lask-RESTful 提供了一些方便的工具來簡化 RESTful API 的開發(fā)。使用 Flask-RESTful 可以快速地定義資源、解析請求參數(shù)、格式化響應(yīng)數(shù)據(jù)、定義路由和處理異常等,從而提高開發(fā)效率并降低出錯的風(fēng)險。
2)Flask-RESTful 庫安裝
要安裝 Flask-RESTful 庫,可以使用 pip 命令進(jìn)行安裝。在終端中執(zhí)行以下命令:
pip3 install flask-restful
這將會從 PyPI 上下載 Flask-RESTful 庫,并安裝到本地的 Python 環(huán)境中。安裝完成后,就可以在代碼中導(dǎo)入 flask_restful
模塊,使用 Flask-RESTful 提供的功能來構(gòu)建 RESTful API。
3)RESTful 示例講解
下面是一個簡單的 Flask RESTful API 示例,它實現(xiàn)了一個簡單的 To-Do List 應(yīng)用程序:
from flask import Flask, request from flask_restful import Api, Resource, reqparse, fields, marshal_with app = Flask(__name__) api = Api(app) todos = {} todo_fields = { 'id': fields.Integer, 'task': fields.String, 'status': fields.Boolean } class TodoList(Resource): @marshal_with(todo_fields) def get(self): return todos @marshal_with(todo_fields) def post(self): parser = reqparse.RequestParser() parser.add_argument('task', type=str, help='Task is required', required=True) args = parser.parse_args() todo_id = len(todos) + 1 todo = {'task': args['task'], 'status': False} todos[todo_id] = todo return todo, 201 class TodoItem(Resource): @marshal_with(todo_fields) def get(self, todo_id): return todos[todo_id] def put(self, todo_id): parser = reqparse.RequestParser() parser.add_argument('task', type=str) parser.add_argument('status', type=bool) args = parser.parse_args() todo = todos[todo_id] if args['task']: todo['task'] = args['task'] if args['status']: todo['status'] = args['status'] return todo def delete(self, todo_id): del todos[todo_id] return '', 204 api.add_resource(TodoList, '/todos') api.add_resource(TodoItem, '/todos/<int:todo_id>') if __name__ == '__main__': app.run(debug=True)
啟動
# 配置環(huán)境變量 export FLASK_APP=restful-test.py # 啟動服務(wù),公開訪問需要加上--host=0.0.0.0 python -m flask run --host=0.0.0.0
該示例使用 Flask 和 Flask-RESTful 庫來實現(xiàn) To-Do List 應(yīng)用程序的 RESTful API。下面是一些重要的代碼片段的解釋:
- 定義資源:在示例中,有兩個資源:
TodoList
和TodoItem
。TodoList
用于處理所有的 To-Do 任務(wù)列表,TodoItem
用于處理單個任務(wù)。 - 定義請求參數(shù):在示例中,我們使用 Flask-RESTful 庫的 RequestParser 來解析請求參數(shù)。我們定義了
'task'
和'status'
參數(shù),并使用add_argument()
方法來指定它們的類型和其他限制條件。 - 定義響應(yīng)格式:在示例中,我們使用 Flask-RESTful 庫的
marshal_with()
裝飾器來定義響應(yīng)的格式。我們定義了一個名為todo_fields
的字典,其中包含了 To-Do 任務(wù)的id
、task
和status
字段。 - 定義請求方法:在示例中,我們使用 Flask-RESTful 庫的 Resource 類來定義請求方法。我們實現(xiàn)了
GET
、POST
、PUT
和DELETE
方法,用于獲取任務(wù)列表、添加任務(wù)、更新任務(wù)和刪除任務(wù)。 - 添加路由:在示例中,我們使用 Flask-RESTful 庫的 Api 類來添加路由。我們使用
add_resource()
方法來將 TodoList 和 TodoItem 類與相應(yīng)的 URL 路由綁定起來。
在運行該示例后,可以通過訪問 URL 來使用 To-Do List 應(yīng)用程序的 RESTful API。例如,要獲取所有任務(wù)列表,可以使用以下 URL:
# GET http://localhost:5000/todos curl http://localhost:5000/todos
要添加一個新任務(wù),可以使用以下 URL:
# POST http://localhost:5000/todos curl -XPOST http://localhost:5000/todos -d 'task=123' curl -XPOST http://localhost:5000/todos -d '{"task":"456"}' --header "Content-Type: application/json"
要獲取單個任務(wù),可以使用以下 URL:
# GET http://localhost:5000/todos/1 curl http://localhost:5000/todos/1
要更新任務(wù),可以使用以下 URL:
# PUT http://localhost:5000/todos/1 curl -XPUT http://localhost:5000/todos/1 -d '{"task":"test"}' --header "Content-Type: application/json" # 查看 curl http://localhost:5000/todos/1
要刪除任務(wù),可以使用以下 URL:
# DELETE http://localhost:5000/todos/1 curl -XDELETE http://localhost:5000/todos/1
總的來說,這個示例演示了如何使用 Flask-RESTful 來構(gòu)建簡單的 RESTful API,其中包括資源定義、請求參數(shù)解析、響應(yīng)格式定義、請求方法實現(xiàn)和路由添加等關(guān)鍵步驟。
以上就是Python Flask RESTful使用demo演示的詳細(xì)內(nèi)容,更多關(guān)于Python Flask RESTful的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python venv虛擬環(huán)境跨設(shè)備遷移的實現(xiàn)
本文主要介紹了Python venv虛擬環(huán)境跨設(shè)備遷移的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06python通過zlib實現(xiàn)壓縮與解壓字符串的方法
這篇文章主要介紹了python通過zlib實現(xiàn)壓縮與解壓字符串的方法,較為詳細(xì)的介紹了zlib的用法及使用zlib.compressobj和zlib.decompressobj對文件進(jìn)行壓縮解壓的方法,需要的朋友可以參考下2014-11-11Pytorch?autograd與邏輯回歸的實現(xiàn)詳解
這篇文章主要為大家介紹了Pytorch?autograd與邏輯回歸的實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Python 創(chuàng)建新文件時避免覆蓋已有的同名文件的解決方法
今天小編就為大家分享一篇Python 創(chuàng)建新文件時避免覆蓋已有的同名文件的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python算法輸出1-9數(shù)組形成的結(jié)果為100的所有運算式
這篇文章主要介紹了Python算法輸出1-9數(shù)組形成的結(jié)果為100的所有運算式,然后介紹了另外一個相關(guān)實例,具體內(nèi)容請參閱正文,需要的朋友可以參考下。2017-11-11Python實現(xiàn)排序算法、查找算法和圖遍歷算法實例
這篇文章主要介紹了Python實現(xiàn)排序算法、查找算法和圖遍歷算法實例,排序算法、查找算法和圖遍歷算法是計算機(jī)科學(xué)中常見且重要的算法。它們在數(shù)據(jù)處理、搜索和圖結(jié)構(gòu)等領(lǐng)域發(fā)揮著關(guān)鍵作用,需要的朋友可以參考下2023-08-08