エンドポイントの設定

APIを作成する際に欠かせない「エンドポイント」について、Flaskを用いた実装と設計の基本を整理しました。
エンドポイントは、WebAPIにおいてクライアントが特定のリソースや機能にアクセスするための窓口となるURLです。Flaskではデコレーターを用いることで、非常に直感的にこの窓口を設置できます。
Flaskでのエンドポイント定義
Flaskでは、@app.route() デコレーターを使用してURLパスを指定し、対応するHTTPメソッドを設定します。
from flask import Flask, jsonify, request
app = Flask(__name__)
# データ取得用エンドポイント
@app.route('/api/get_data', methods=['GET'])
def get_data():
return jsonify({"message": "データを取得しました", "status": "success"})
# データ送信・処理用エンドポイント
@app.route('/api/post_data', methods=['POST'])
def post_data():
data = request.json
return jsonify({"message": "データを受け取りました", "data": data, "status": "success"})
if __name__ == '__main__':
app.run(debug=True)
エンドポイントとHTTPメソッドの役割
定義するエンドポイントは、目的に応じてHTTPメソッドを適切に使い分けるのが基本です。
| エンドポイント | HTTPメソッド | 説明 |
|---|---|---|
/api/get_data |
GET | サーバーから情報を読み取り、取得する |
/api/post_data |
POST | クライアントから情報を送信し、作成や処理を行う |
クライアント側からのアクセス例
定義したエンドポイントに対して、Pythonの requests ライブラリを使用してリクエストを送信する手順は以下の通りです。
import requests
# GETリクエストの実行
response_get = requests.get('http://localhost:5000/api/get_data')
print(response_get.json())
# POSTリクエストの実行
payload = {"name": "Python", "type": "API"}
response_post = requests.post('http://localhost:5000/api/post_data', json=payload)
print(response_post.json())
リクエストデータのバリデーション
堅牢なAPIを作るためには、送られてきたデータが想定通りであるかを検証(バリデーション)することが不可欠です。不正なデータを受け取った場合は、適切なステータスコード(400 Bad Requestなど)を返すようにしましょう。
@app.route('/api/post_data', methods=['POST'])
def post_data():
# データがJSON形式であるかの確認
if not request.is_json:
return jsonify({"message": "JSON形式で送信してください", "status": "error"}), 400
data = request.json
# 必須フィールドが含まれているかの確認
if 'name' not in data or 'type' not in data:
return jsonify({"message": "データが不足しています", "status": "error"}), 400
return jsonify({"message": "受理しました", "data": data, "status": "success"})
まとめ
API構築におけるエンドポイントは、クライアントとサーバーをつなぐ玄関口です。Flaskを使用すれば、メソッドの定義やデータバリデーションを含めた実装をシンプルに行えます。エラー時には適切なステータスコードを返し、データの形式を厳格にチェックする習慣を身につけることで、利用しやすく安全なAPIを提供できるようになります。次は、今回触れたようなエラーハンドリングや、認証機能によるセキュリティ強化について掘り下げていくのがおすすめです。