API 就是兩個程式之間的溝通介面。REST API 用 HTTP 方法表達操作:
GET /api/todos → 取得所有
POST /api/todos → 新增
PUT /api/todos/3 → 更新第 3 筆
DELETE /api/todos/3 → 刪除第 3 筆API 就是兩個程式之間的溝通介面。REST API 用 HTTP 方法表達操作:
GET /api/todos → 取得所有
POST /api/todos → 新增
PUT /api/todos/3 → 更新第 3 筆
DELETE /api/todos/3 → 刪除第 3 筆# pip install flask
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route("/api/hello")
def hello():
name = request.args.get("name", "陌生人")
return jsonify({"greeting": f"哈囉,{name}!"})
@app.route("/api/echo", methods=["POST"])
def echo():
data = request.get_json()
return jsonify({"你傳送了": data})
if __name__ == "__main__":
app.run(debug=True, port=5000)from flask import Flask, jsonify, request, abort
app = Flask(__name__)
todos = []; next_id = 1
@app.route("/api/todos", methods=["GET"])
def get_todos():
return jsonify(todos)
@app.route("/api/todos", methods=["POST"])
def create_todo():
global next_id
data = request.get_json()
todo = {"id": next_id, "title": data["title"], "done": False}
next_id += 1; todos.append(todo)
return jsonify(todo), 201
@app.route("/api/todos/", methods=["DELETE"])
def delete_todo(todo_id):
global todos
todos = [t for t in todos if t["id"] != todo_id]
return jsonify({"message": "已刪除"}) # pip install schedule
import schedule, time
def daily_task():
print("執行每日任務...")
schedule.every().day.at("09:00").do(daily_task)
while True:
schedule.run_pending()
time.sleep(30)
from flask import Flask, request, jsonify
app = Flask(__name__)
todos = [
{"id": 1, "title": "學 Python", "done": True},
{"id": 2, "title": "寫 API", "done": False},
]
@app.route("/api/todos", methods=["GET"])
def get_todos():
return jsonify(todos)
@app.route("/api/todos", methods=["POST"])
def create_todo():
data = request.get_json()
new_id = max(t["id"] for t in todos) + 1 if todos else 1
todo = {"id": new_id, "title": data["title"], "done": False}
todos.append(todo)
return jsonify(todo), 201 # 201 Created
@app.route("/api/todos/", methods=["PUT"])
def update_todo(todo_id):
data = request.get_json()
for todo in todos:
if todo["id"] == todo_id:
todo.update(data)
return jsonify(todo)
return jsonify({"error": "找不到"}), 404
if __name__ == "__main__":
app.run(debug=True, port=5000)
from flask_cors import CORS
CORS(app, origins=["https://jiu-tao.com"])
# 簡單的 API Key 驗證
API_KEYS = {"abc123": "admin", "xyz789": "user"}
from functools import wraps
def require_api_key(f):
@wraps(f)
def decorated(*args, **kwargs):
key = request.headers.get("X-API-Key")
if key not in API_KEYS:
return jsonify({"error": "未授權"}), 401
return f(*args, **kwargs)
return decorated