Python: 使用 Flask 實現 REST API

此文件屬於建立 REST API指南的一部分。請在此處查看完整指南:如何使用 Flask 建立 REST API

👋 歡迎來到 Stackhero 文檔!

Stackhero 提供一個即用型的 Python 雲端 解決方案,帶來多項好處,包括:

  • 只需一個簡單的 git push,即可在幾秒鐘內部署您的應用程式。
  • 使用您自己的域名,並享受 HTTPS 證書的自動配置以增強安全性。
  • 享受自動備份一鍵更新,以及簡單、透明且可預測的定價,讓您安心無憂。
  • 得益於專用的私人 VM,獲得最佳的性能和強大的安全性

節省時間簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Python 雲端託管 解決方案!

現在,讓我們進入程式碼!

建立一個名為 app.py 的文件,並插入以下程式碼:

import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request

# 當不在生產環境時,從 .env 文件加載環境變數
if os.environ.get('ENV') != 'production':
    load_dotenv()

# 建立 Flask 應用程式
app = Flask(__name__)

# 範例數據集
tasks = [
    {
        'id': 1,
        'title': '買雜貨',
        'description': '牛奶、奶酪、披薩、水果',
        'done': False
    },
    {
        'id': 2,
        'title': '學習 Python',
        'description': '學習 Python 程式設計基礎',
        'done': False
    }
]

# 路由 '/api/tasks' (GET) 列出所有任務
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

# 路由 '/api/tasks/<task_id>' (GET) 根據 ID 獲取特定任務
@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = [task for task in tasks if task['id'] == task_id]
    if len(task) == 0:
        return jsonify({'error': '任務未找到'}), 404
    return jsonify({'task': task[0]})

# 路由 '/api/tasks' (POST) 創建新任務
@app.route('/api/tasks', methods=['POST'])
def create_task():
    if not request.json or 'title' not in request.json:
        return jsonify({'error': '標題是必需的'}), 400
    task = {
        'id': tasks[-1]['id'] + 1,
        'title': request.json['title'],
        'description': request.json.get('description', ""),
        'done': False
    }
    tasks.append(task)
    return jsonify({'task': task}), 201

# 啟動 API 伺服器
if __name__ == '__main__':
    if os.environ.get('ENV') == 'production':
        app.run()
    else:
        app.run(host='0.0.0.0', port=8080, debug=True)

要啟動伺服器,請運行:

python app.py

使用 host='0.0.0.0' 選項,您也可以在使用 Code-Hero 時通過瀏覽器訪問您的 API。只需導航到 http://<XXXXXX>.stackhero-network.com:8080/api/tasks,將 <XXXXXX> 替換為您的 Code-Hero 網域。