天天看點

通過Flask架構建立靈活的、可擴充的Web Restful API服務

作者:程式員梓羽同學
通過Flask架構建立靈活的、可擴充的Web Restful API服務

RESTFUL API

當今,Restful API 在 Web 開發服務上已經成為主流,Python 作為一門優秀的程式設計語言,也是以擁有了實作 Restful API 的強大優勢。而本文将從什麼是 Restful API 入手,逐漸詳細介紹基于 Python 實作 Restful API 的原理和實作,幫助我們更快有效地學習和實踐 Restful API 的應用技巧。

什麼是 RESTful API?

Restful API,即 Representational State Transfer(資源狀态轉移)應用程式接口,是一種軟體架構風格,由 Roy Fielding 提出,它包含一組限制條件和原則,以支援 Web 應用的分布式超媒體系統。使用 Restful API,我們可以在簡單可擴充的 Web 服務中使用公共 HTTP 方法來通路資源。

通過Flask架構建立靈活的、可擴充的Web Restful API服務

RESTFUL 應用

RESTful API 使用統一的接口來對資源進行操作,可以輕松地實作跨語言、跨平台的資料互動。RESTful API 通常使用 JSON 或 XML 格式來傳輸資料,具有簡潔、可讀性強、易于擴充等特點,可以被各種程式設計語言調用。。

RESTful API 的核心概念是資源和 HTTP 方法。資源是指 API 中的對象或資料,比如使用者、文章、評論等。HTTP 方法是指對資源進行操作的動作,比如 GET、POST、PUT、DELETE 等。

設計 RESTful API

設計 RESTful API 需要遵循一定的規範和原則。下面是一些常見的設計原則:

  • • 使用名詞來表示資源,比如 /users、/articles 等。
  • • 使用 HTTP 方法來表示對資源的操作,比如 GET、POST、PUT、DELETE 等。
  • • 使用 URL 參數來傳遞附加資訊,比如查詢條件、分頁資訊等。
  • • 使用 HTTP 狀态碼來表示操作結果,比如 200 表示成功、201 表示建立成功、400 表示請求錯誤、404 表示資源不存在等。
  • • 使用 JSON 或 XML 格式來傳輸資料。

下面是一個簡單的 RESTful API 設計示例:

GET /users        # 擷取所有使用者資訊
GET /users/1      # 擷取指定使用者資訊
POST /users       # 添加使用者
PUT /users/1      # 修改指定使用者資訊
DELETE /users/1   # 删除指定使用者           
通過Flask架構建立靈活的、可擴充的Web Restful API服務

API 方法清單

Python 實作 RESTful API

Python 作為一門解釋性語言,擁有着活躍的開源社群,其中也包含了非常成熟的 Web 開發架構,比如 Django、Flask、Tornado 等,而本文主要介紹如何使用 Flask 架構來實作 Restful API 服務的搭建。

通過Flask架構建立靈活的、可擴充的Web Restful API服務

Flask + Restful

Flask 架構介紹

Flask 是一個輕量級Web架構,可以實作快速的 Web 開發,并且提供了良好的擴充性。另外,Flask 還為實作 Restful API 提供了很多友善的工具,如Flask Restful 和 Flask Restplus 等。Flask 的代碼結構簡單,上手容易,比 Django 等其他架構更為輕量級,更适合快速疊代。

通過Flask架構建立靈活的、可擴充的Web Restful API服務

Flask

安裝 Flask

首先,我們需要安裝 Flask。可以使用 pip 指令來安裝:

pip install flask           

建立 Flask 應用

首先,我們需要導入 Flask 子產品,并建立一個 Flask 應用執行個體:

from flask import Flask

app = Flask(__name__)           

這裡的 __name__ 參數表示目前子產品的名字,Flask 根據這個參數來确定應用的根目錄。

定義 API 路由

接下來,我們需要定義 API 的路由和處理函數。在 Flask 中,可以使用 @app.route 裝飾器來定義路由:

@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)           

這裡的 /users 表示路由的路徑,methods=['GET'] 表示這個路由隻支援 GET 方法。get_users 函數是這個路由的處理函數,它傳回一個 JSON 格式的使用者清單。

同樣的,我們還可以定義其他路由和處理函數,比如擷取指定使用者資訊、添加使用者、修改使用者資訊和删除使用者等。

處理請求參數

在 RESTful API 中,用戶端通常需要向伺服器傳遞一些參數,比如查詢條件、請求體等。在 Flask 中,可以使用 request 對象來通路這些參數:

user = {'id': request.json['id'], 'name': request.json['name'], 'age': request.json['age']}           

這裡的 request.json 表示請求體中的 JSON 資料。如果請求體不是 JSON 格式,可以使用 request.form 或 request.args 來擷取表單資料或查詢參數。

傳回 JSON 資料

在 RESTful API 中,通常需要傳回 JSON 格式的資料。在 Flask 中,可以使用 jsonify 函數來将 Python 對象轉換為 JSON 格式的資料:

return jsonify(users)           

這裡的 users 是一個 Python 清單對象,jsonify(users) 将它轉換為 JSON 格式的資料,并傳回給用戶端。

啟動應用

最後,我們需要在應用中啟動 Flask 伺服器:

if __name__ == '__main__':
    app.run()           

這裡的 __name__ 參數表示目前子產品的名字,app.run() 表示啟動 Flask 伺服器,預設監聽在本地的 5000 端口上。如果需要修改監聽位址或端口,可以使用 host 和 port 參數來指定。

編寫代碼

下面是一個簡單的 Flask 應用,它實作了一個簡單的 RESTful API,用于擷取和修改使用者資訊:

from flask import Flask, jsonify, request

app = Flask(__name__)

# 使用者資料(模拟資料庫)
users = [
    {"id": 1, "name": "Alice", "age": 20},
    {"id": 2, "name": "Bob", "age": 25},
    {"id": 3, "name": "Charlie", "age": 30},
]

# 擷取所有使用者資訊
@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

# 擷取指定使用者資訊
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = next((user for user in users if user['id'] == user_id), None)
    if user:
        return jsonify(user)
    else:
        return jsonify({'error': 'User not found'})

# 添加使用者
@app.route('/users', methods=['POST'])
def add_user():
    user = {'id': request.json['id'], 'name': request.json['name'], 'age': request.json['age']}
    users.append(user)
    return jsonify(user)

# 修改使用者資訊
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    user = next((user for user in users if user['id'] == user_id), None)
    if user:
        user['name'] = request.json.get('name', user['name'])
        user['age'] = request.json.get('age', user['age'])
        return jsonify(user)
    else:
        return jsonify({'error': 'User not found'})

# 删除使用者
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    user = next((user for user in users if user['id'] == user_id), None)
    if user:
        users.remove(user)
        return jsonify({'result': True})
    else:
        return jsonify({'error': 'User not found'})

if __name__ == '__main__':
    app.run()           

測試 API

啟動應用後,我們可以使用 curl 指令或其他工具來測試 API:

# 擷取所有使用者資訊
curl http://localhost:5000/users

# 擷取指定使用者資訊
curl http://localhost:5000/users/1

# 添加使用者
curl -H "Content-Type: application/json" -X POST -d '{"id": 4, "name": "David", "age": 35}' http://localhost:5000/users

# 修改使用者資訊
curl -H "Content-Type: application/json" -X PUT -d '{"name": "Alice Smith", "age": 22}' http://localhost:5000/users/1

# 删除使用者
curl -X DELETE http://localhost:5000/users/4           

以上就是一個簡單的 Python Flask RESTful API 的實作。當然,實際的應用可能會更加複雜,需要考慮安全性、性能等問題。但是,通過這個例子,相信大家已經有了一定的了解和認識。