Contents
FlaskでRESTful APIを構築する前に必要な準備
FlaskでRESTful APIを開発するには、開発環境の整備が不可欠です。特にPythonバージョンや仮想環境の設定は、プロジェクトの安定性に直結します。また、flaskパッケージのインストール方法やプロジェクトディレクトリの作成手順を明確に理解しておく必要があります。以下では、この準備工程における具体的な手順と注意点を解説します。
開発環境の確認
FlaskはPython 3.7以降で動作するため、まず自身のPCで使用しているPythonバージョンを確認しましょう。ターミナルやコマンドプロンプトで以下を実行してください。
|
1 2 |
python --version |
結果がPython 3.x.xと表示されれば準備は整っています。もしバージョンが古い場合は、official Python websiteから最新版をインストールしてください。
仮想環境の作成手順
複数のプロジェクトを管理する際や、依存ライブラリの衝突を防ぐために、仮想環境の利用が推奨されます。以下はvirtualenvを使用した手順です。
仮想環境の作成と有効化手順
- プロジェクトディレクトリを作成します(例:
my_flask_api/) -
ディレクトリ内に移動し、仮想環境を生成します
python -m venv venv -
仮想環境を有効化します(OSによってコマンドが異なります)
- Windows:
venv\Scripts\activate - macOS/Linux:
source venv/bin/activate
手順とコマンドの比較表
| 手順 | コマンド例 | 説明 |
|---|---|---|
| 1. | mkdir my_flask_api && cd my_flask_api |
プロジェクトディレクトリの作成と移動 |
| 2. | python -m venv venv |
仮想環境生成(venvという名前のディレクトリが作成されます) |
| 3. | source venv/bin/activate |
仮想環境の有効化(OSに応じてコマンドが異なります) |
注意: 仮想環境を終了するには、
deactivateコマンドを使用してください。
Flaskの基本構造と初期設定
Flaskアプリケーションを作成する際、プロジェクトルートに配置されるapp.pyというファイルが中心になります。このファイルでは、アプリケーションのインスタンスを作成し、ルーティングやリクエスト処理を定義します。
app.pyのテンプレートファイル
以下は、Flaskアプリケーションの基本構造を示したapp.pyの例です。このコードで簡単な「Hello World」サーバーが動作します。
|
1 2 3 4 5 6 7 8 9 10 11 |
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(debug=True) |
Flaskクラスインスタンスの生成:app = Flask(__name__)- ルーティング指定:
@app.route('/')デコレーターでURLと関数を結びつけます。 - サーバー起動:
app.run(debug=True)で開発用サーバーを起動します(本番環境ではdebugモードは使用しないことを注意してください)。
起動確認の手順
準備が整った後、以下のようにアプリケーションを起動してみましょう。ブラウザでhttp://127.0.0.1:5000/にアクセスすると「Hello, World!」と表示されます。
|
1 2 |
python app.py |
補足: サーバーが起動していない場合は、
app.run()の引数でホストやポートを変更できます(例:app.run(host='0.0.0.0', port=5001))。
ルーティングとリクエスト処理の基礎
Flaskでは@app.route()デコレーターを使用して、URLと関数を結びつけます。このセクションではGETメソッドの基本的な使い方や、動的ルーティングの実装方法を解説します。
GETメソッドの基本的な使い方
GETメソッドは、データを取得するために使われます。以下は/user/123にアクセスした際に「User 123」を返すコード例です。
|
1 2 3 4 |
@app.route('/user/<user_id>') def get_user(user_id): return f'User {user_id}' |
<user_id>は動的パラメータで、URLから取得された値が関数の引数に代入されます。- これにより、
/user/123や/user/456といったURLにアクセスした際に、それぞれ異なるレスポンスを返すことができます。
動的ルーティングの実装
動的ルーティングは、パラメータが固定でない場合に使用します。以下は、複数のパラメータを受け取る例です。
|
1 2 3 4 |
@app.route('/book/<book_id>/<chapter>') def get_book(book_id, chapter): return f'Book ID: {book_id}, Chapter: {chapter}' |
このコードでは/book/123/chapter4といったURLにアクセスすると、「Book ID: 123, Chapter: chapter4」というレスポンスを返します。
JSONデータのやりとりとHTTPメソッド
Flask APIでJSONデータを取り扱うには、リクエストからJSONを受け取るための処理と、レスポンスとしてJSONを返却する処理が必要です。以下ではそれぞれの方法について解説します。
request.get_json()の使い方
POSTリクエストで送信されたJSONデータを受け取るにはrequest.get_json()メソッドを使用します。以下のコードは、/dataというエンドポイントにPOSTリクエストを送った際に、JSONデータを受け取る例です。
|
1 2 3 4 5 6 7 |
from flask import request @app.route('/data', methods=['POST']) def receive_data(): data = request.get_json() return f'Received: {data["name"]}, Age: {data["age"]}' |
methods=['POST']でこのルーティングにPOSTメソッドを指定しています。- リクエストデータは
request.get_json()で取得できます。
response.jsonify()の活用
レスポンスとしてJSONデータを返却するには、jsonify()関数を使用します。以下は、GETリクエストを受け取った際にJSON形式でデータを返す例です。
|
1 2 3 4 5 6 7 |
from flask import jsonify @app.route('/user/123') def get_user(): user = {'id': 123, 'name': 'John Doe', 'age': 30} return jsonify(user) |
このコードでは、/user/123にアクセスすると以下のようなJSONデータが返却されます。
|
1 2 3 4 5 6 |
{ "id": 123, "name": "John Doe", "age": 30 } |
簡単な認証機能の実装
Flask APIでは、セキュリティを確保するために基本的な認証機能が必要です。以下ではトークンベースの簡単な認証方法について解説します。
トークン認証の基本構造
トークン認証は、リクエストヘッダーに指定されたトークンが正しいかをチェックする仕組みです。以下はその実装例です。
|
1 2 3 4 5 6 7 8 9 10 11 |
from flask import request, jsonify SECRET_TOKEN = 'my-secret-token' # **注意: 実環境ではハードコーディングしないこと** @app.route('/protected', methods=['GET']) def protected_route(): token = request.headers.get('Authorization') if token != SECRET_TOKEN: return jsonify({'error': 'Invalid token'}), 401 return jsonify({'message': 'Access granted'}) |
セキュリティ注意:
SECRET_TOKENは本番環境では絶対にハードコーディングしないこと。
実際には、環境変数や暗号化された設定ファイルを使用するべきです(例:os.environ.get('SECRET_TOKEN'))。
リクエストヘッダーでの検証
上記のコードでは、リクエストヘッダーのAuthorizationフィールドにトークンを指定してアクセスします。以下の例のようにcurlコマンドでテストできます。
|
1 2 |
curl -H "Authorization: my-secret-token" http://127.0.0.1:5000/protected |
完成までに確認すべきポイントと今後のステップ
Flask APIの構築が完了した後も、いくつかのチェックポイントがあります。特にエラーハンドリングやテスト方法については、安定したAPI運用において非常に重要です。
エラーハンドリングの重要性
リクエスト処理中に例外が発生した場合、適切なエラー応答を返却する必要があります。以下はHTTP 404エラー時の処理例です。
|
1 2 3 4 |
@app.errorhandler(404) def page_not_found(e): return jsonify({'error': 'Resource not found'}), 404 |
@app.errorhandler()デコレーターで、特定のHTTPステータスコードに対する処理を定義できます。- エラーメッセージをJSON形式で返却することで、クライント側での処理が容易になります。
テスト用クライアントツールの紹介
APIの動作確認には、curlやPostmanなどのツールが有効です。以下はcurlを使用したGETリクエストの例です。
|
1 2 |
curl http://127.0.0.1:5000/user/123 |
curlはコマンドラインから簡単にテスト可能です。- PostmanやInsomniaなどのツールでは、リクエストヘッダーやペイロードを視覚的に確認できるため、開発効率が向上します。
まとめ
本記事では、FlaskでRESTful APIを構築する手順をステップバイステップで解説しました。主なポイントは以下の通りです:
- 開発環境の整備(Pythonバージョン確認、仮想環境作成)
- Flaskアプリケーションの基本構造(
app.pyファイルの作成と起動確認) - ルーティングとリクエスト処理(GETメソッド、動的ルーティング)
- JSONデータのやりとり(
request.get_json()とjsonify()の使用) - 簡単な認証機能(トークンベースの検証手順)
さらに進む場合は、公式ドキュメントやPostmanによるテストを併せて行うことで、より確かな知識が得られます。ぜひ実際のコードで試しながら理解を深めてください。