首頁  >  文章  >  後端開發  >  Python Flask RESTful怎麼使用

Python Flask RESTful怎麼使用

王林
王林轉載
2023-04-29 19:49:121500瀏覽

一、RESTful 概述

REST(Representational State Transfer)風格是一種資源導向的Web 應用程式設計風格,它遵循一些設計原則,使得Web 應用程式具有良好的可讀性、可擴充性和可維護性。下面我們來詳細解釋一下RESTful 風格的各個方面:

  • 資源標識符:在RESTful 風格中,每個資源都有一個唯一的標識符,通常是一個 URL(Uniform Resource Locator)。 URL 用於標識資源的位置,使得用戶端可以使用 HTTP 協定進行存取。例如,一個簡單的URL 可以是:http://example.com/products/123,其中「products」表示資源類型,「123」表示資源標識符。

  • 表示層:資源可以以不同的格式表示,例如 JSONXML#,HTML  等。客戶端可以根據需要選擇適當的表示形式進行互動。例如,一個 RESTful API 可以傳回 JSON 格式的數據,以便用戶端可以更輕鬆地解析和處理資料。

  • 自描述訊息:每個訊息都應該包含足夠的信息,以描述如何處理該訊息。例如,HTTP 回應應該包含狀態碼、回應頭和回應正文等訊息,以便客戶端可以理解回應的含義。

  • 無狀態通信RESTful 風格的設計強調無狀態通信,這意味著每個請求都應該包含所有必要的信息以處理該請求,而不依賴先前的請求。這可以使得 Web 應用程式更加簡單和可擴展,因為伺服器不需要保留任何狀態資訊。

  • 統一介面:所有資源應該透過相同的介面來存取。這表示客戶端可以使用相同的HTTP 方法(如 GETPOSTPUTDELETE 等)來操作不同類型的資源。這使得 API 更加簡單和一致,並且更容易被其他開發者理解和使用。

總之,RESTful 風格的設計使得 Web 應用程式更加靈活、可擴展且易於維護,是一種現代化的 Web 應用程式設計方式。

二、Python 中的 RESTful

Python 可以用於實作 RESTful 風格的 Web 應用程序,通常使用一些 Web 框架來簡化開發流程。以下是一些常見的Python Web 框架:

  • FlaskFlask 是一個簡單、輕量級的Web 框架,可以用來建立RESTful 風格的Web 應用程式。它使用 Python 的裝飾器語法來定義 HTTP 路由,使得編寫 Web 應用程式變得簡單且直觀。 Flask 還提供了擴展機制,讓開發人員可以輕鬆地添加新的功能,例如資料庫存取、表單驗證等。

  • DjangoDjango# 是一個強大、全面的 Web 框架,可用於建立複雜的 Web 應用程式。它提供了許多內建功能,例如 ORM(物件關聯映射)、表單驗證、身份驗證等,可以使開發人員更快地建立 Web 應用程式。 Django 也支援 RESTful 風格的 Web 應用程式開發,可使用第三方函式庫 Django REST framework 來實現。

  • BottleBottle 是一個輕量級的Web 框架,它使用Python 的裝飾語法來定義HTTP 路由,可以快速建立RESTful 風格的Web 應用程式。 Bottle 還包含了一些有用的功能,例如模板引擎、資料庫存取、靜態文件處理等。

  • PyramidPyramid 是一個靈活、高度可自訂的Web 框架,可用於建立各種類型的Web 應用程序,包括RESTful 風格的Web 應用程式。 Pyramid 提供了許多擴充機制,讓開發人員可以輕鬆地添加新的功能,例如資料庫存取、表單驗證、身份驗證等。

以上框架都支援 RESTful 風格的 Web 應用程式開發,並且都具有各自的優缺點,開發人員可以根據自己的需求選擇合適的框架。

三、Flask RESTful API 範例講解

1)Flask-RESTful 庫講解

Flask-RESTful 是一個基於Flask 的擴充庫,它提供了一些方便的工具來建立RESTful API。以下是 Flask-RESTful 的一些主要特點和功能:

  • 資源類別:Flask-RESTful 提供了一個 Resource 基底類,可以用來建立資源。 Resource 類別包含了HTTP 方法(GETPOSTPUTDELETE 等)的處理邏輯,並提供了一些方便的方法來處理請求和回應。

  • 請求參數解析:Flask-RESTful 提供了一個 RequestParser 類,用於解析請求參數。 RequestParser 可以自動將查詢參數、表單參數、JSON 參數等解析成 Python 類型,並提供了一些選項來指定參數的類型、預設值、必須存在等限制條件。

  • 回應格式化:Flask-RESTful 提供了一個 marshal_with() 裝飾器,用於格式化回應資料。 marshal_with() 裝飾器可以將 Python 物件轉換成指定的輸出格式(如 JSON、XML 等),並支援指定輸出欄位、欄位類型、巢狀欄位等功能。

  • 路由定義: Flask-RESTful 提供了一個 Api 類,用於定義路由和資源的對應關係。 Api 類別包含了 add_resource()方法,用於將資源類別和 URL 路由綁定。

  • 異常處理:Flask-RESTful 提供了一些異常類,用於處理 HTTP 請求和回應中的錯誤。 Flask-RESTful 的例外類別包括 abortHTTPException 等,可以方便地處理 HTTP 狀態碼錯誤訊息等。

綜上所述,Flask-RESTful 提供了一些方便的工具來簡化 RESTful API 的開發。使用 Flask-RESTful 可以快速地定義資源、解析請求參數、格式化回應資料、定義路由和處理異常等,從而提高開發效率並降低出錯的風險。

2)Flask-RESTful 庫安裝

要安裝 Flask-RESTful 庫,可以使用 pip 指令進行安裝。在終端機中執行以下命令:

pip3 install flask-restful

這將會從 PyPI 上下載 Flask-RESTful 函式庫,並安裝到本機的 Python 環境中。安裝完成後,就可以在程式碼中匯入 flask_restful 模組,使用 Flask-RESTful 提供的功能來建立 RESTful API。

3)RESTful 範例講解

下面是一個簡單的Flask RESTful API 範例,它實作了一個簡單的To-Do List 應用程式:

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, &#39;/todos/<int:todo_id>&#39;)
if __name__ == &#39;__main__&#39;:
    app.run(debug=True)

#
# 配置环境变量
export FLASK_APP=restful-test.py
# 启动服务,公开访问需要加上--host=0.0.0.0
python -m flask run --host=0.0.0.0

此範例使用Flask 和Flask-RESTful 庫來實作To-Do List 應用程式的RESTful API。以下是一些重要的程式碼片段的解釋:

  • #定義資源:在範例中,有兩個資源:TodoList 和 TodoItemTodoList 用來處理所有的 To-Do 任務列表,TodoItem 用來處理單一任務。

  • 定義請求參數:在範例中,我們使用 Flask-RESTful 函式庫的 RequestParser 來解析請求參數。我們定義了 'task' 和 'status' 參數,並使用 add_argument() 方法來指定它們的型別和其他限制條件。

  • 定義回應格式:在範例中,我們使用 Flask-RESTful 函式庫的 marshal_with() 裝飾器來定義回應的格式。我們定義了一個名為 todo_fields 的字典,其中包含了 To-Do 任務的 idtask 和 #status 欄位。

  • 定義請求方法:在範例中,我們使用 Flask-RESTful 函式庫的 Resource 類別來定義請求方法。我們實作了 GETPOSTPUT 和 DELETE 方法,用於取得任務清單新增任務更新任務刪除任務

  • 新增路由:在範例中,我們使用 Flask-RESTful 庫的 Api 類別來新增路由。我們使用 add_resource() 方法來將 TodoList 和 TodoItem 類別與對應的 URL 路由綁定。

在執行該範例後,可以透過存取 URL 來使用 To-Do List 應用程式的 RESTful API。例如,要取得所有任務清單,可以使用下列網址:

# GET http://localhost:5000/todos
curl http://localhost:5000/todos

新增一個任務,可以使用下列網址:

# POST http://localhost:5000/todos
curl -XPOST http://localhost:5000/todos -d &#39;task=123&#39;
curl -XPOST http://localhost:5000/todos -d &#39;{"task":"456"}&#39;  --header "Content-Type: application/json"

若要取得單一任務,可以使用下列網址:

# GET http://localhost:5000/todos/1
curl http://localhost:5000/todos/1

更新任務,可以使用下列網址:

# PUT http://localhost:5000/todos/1
curl -XPUT http://localhost:5000/todos/1 -d &#39;{"task":"test"}&#39;  --header "Content-Type: application/json"
# 查看
curl http://localhost:5000/todos/1

刪除任務,可以使用以下網址:

# DELETE http://localhost:5000/todos/1
curl -XDELETE http://localhost:5000/todos/1

Python Flask RESTful怎麼使用

以上是Python Flask RESTful怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除