はじめに
Web開発をしていると、異なるオリジン(ドメインやポートが異なるサイト)からAPIを呼び出すことがあります。
しかし、ブラウザのセキュリティ機能により、CORS (Cross-Origin Resource Sharing) の設定がないとアクセスが制限されてしまいます。
この記事では、PythonのFlaskを使って簡単にCORSを有効にし、ブラウザからAPIを呼び出せるようにする方法を紹介します。
1. 必要なライブラリをインストール
まず、FlaskとFlask-CORSをインストールします。
pip install flask flask-cors
2. Flaskサーバーを作成
以下のコードで簡単なFlaskサーバーを作成します。このサーバーは、/api/data
というエンドポイントを持ち、CORSを有効にしています。
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # すべてのオリジンからのリクエストを許可
@app.route('/api/data')
def get_data():
return jsonify({"message": "Hello, CORS!"})
if __name__ == '__main__':
app.run(debug=True, port=5000)
このコードを app.py
というファイル名で保存します。
3. フロントエンドを作成
次に、CORSの動作を確認するための簡単なHTMLページを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CORS テスト</title>
</head>
<body>
<h1>CORS テスト</h1>
<button onclick="fetchData()">データ取得</button>
<p id="result"></p>
<script>
function fetchData() {
fetch('http://127.0.0.1:5000/api/data')
.then(response => response.json())
.then(data => {
document.getElementById('result').innerText = data.message;
})
.catch(error => console.error('Error:', error));
}
</script>
</body>
</html>
このHTMLファイルを index.html
として保存します。
4. Flaskサーバーを起動
ターミナルでFlaskサーバーを起動します。
python app.py
5. 動作確認
-
index.html
をブラウザで開きます。 - 「データ取得」ボタンを押します。
-
Hello, CORS!
のメッセージが表示されれば成功です。
実際のブラウザ画面
Flaskサーバー画面
6. CORSの制限をカスタマイズ
すべてのオリジンを許可するのではなく、特定のオリジンのみ許可することも可能です。
CORS(app, resources={r"/api/*": {"origins": "http://example.com"}})
これにより、http://example.com
からのリクエストのみ許可されます。
まとめ
- Flask-CORSを使えば簡単にCORSを有効化できる。
- フロントエンドからAPIを呼び出してCORSを確認できる。
- CORSの設定をカスタマイズして、特定のオリジンのみ許可可能。
この方法を使えば、CORSに悩まされることなく開発を進められます。ぜひ試してみてください!