この記事では、PythonでAPIを開発する際にCross-Origin Resource Sharing(CORS)の設定と管理をどのように行うかについて解説します。具体的なコード例とその解説、応用例を含めています。
目次
はじめに
APIを開発する際に避けて通れないのがCORS(Cross-Origin Resource Sharing)です。CORSは、Webページが異なるオリジンで動作するリソースに対して安全にリクエストを行えるようにする仕組みです。PythonでAPIを開発する場合、特に注意が必要です。
基本的なCORSの設定
FlaskでのCORS設定
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # CORS設定を追加
@app.route('/')
def hello_world():
return 'Hello, World!'
この例では、Flaskを用いています。`flask_cors` パッケージを利用して、`CORS(app)` とすることで、全てのルートに対してCORSが有効になります。
FastAPIでのCORS設定
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# CORS設定
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
def read_root():
return {"Hello": "World"}
FastAPIでも、ミドルウェアを用いて簡単にCORSを設定できます。こちらは更に詳細な設定が可能です。
より高度な設定
特定のオリジンのみ許可
from flask_cors import CORS
app = Flask(__name__)
CORS(app, resources={r"/api/*": {"origins": "https://example.com"}})
この設定では、`https://example.com` からのリクエストのみ許可されます。
補足事項
プリフライトリクエスト
CORSでは、実際のリクエストの前に「プリフライトリクエスト」という事前確認が行われる場合があります。これは、サーバに対して特定のリクエストを行っても安全かどうかを確認するためのものです。
応用例
特定のHTTPメソッドのみ許可
CORS(app, resources={r"/api/*": {"origins": "https://example.com", "methods": ["POST", "PUT"]}})
この設定により、POSTとPUTメソッドだけが許可されます。
認証情報を含むリクエストの許可
CORS(app, supports_credentials=True)
この設定では、CookieやHTTP認証情報を含むリクエストも許可されます。
まとめ
PythonでAPIのCORS設定を行う方法にはいくつかの選択肢があります。基本設定から高度な設定まで、用途に応じて選ぶことが重要です。また、セキュリティ面でも十分な配慮が必要です。
コメント