チケット購入APIの処理フロー
チケット購入APIの設計は要件によって異なります。以下に基本的な購入フローの例を示します:
- ユーザーが指定日時・座席のチケット情報を問い合わせる
- リクエストパラメータ(日付、会場、枚数、割引コード等)を取得
- バックエンドデータベースから該当チケット情報を検索
- チケット情報と注文詳細をユーザーに返却
- 注文リクエストがあれば、注文情報を処理してステータスを返す
- 注文状態が変更された場合はユーザーに通知し、再注文または確認を促す
Python実装例
import requests
# APIエンドポイント設定
TICKET_API_ENDPOINT = "https://api.example.com/ticket_purchase"
# リクエスト・レスポンステンプレート
request_template = {
"event_date": "2024-01-20",
"venue": "東京ドーム",
"ticket_count": 1,
"promo_code": ""
}
success_response = {
"result": True,
"msg": "予約完了",
"reservation_id": "RSV20240120001",
"payment_status": "pending"
}
error_response = {
"result": False,
"msg": "処理失敗",
"error_id": "ERR_001"
}
def reserve_tickets(event_date, venue, count, promo=""):
"""チケット予約実行関数"""
query_params = {
'date': event_date,
'location': venue,
'seats': count,
'discount': promo
}
api_response = requests.get(TICKET_API_ENDPOINT, params=query_params)
if api_response.status_code == 200:
reservation_data = api_response.json()
return reservation_data if reservation_data["result"] else error_response
else:
return error_response
テストケース設計
1. 正常系テスト
# テスト設定
test_endpoint = "https://api.example.com/ticket_purchase"
test_parameters = {
"event_date": "2024-01-20",
"venue": "東京ドーム",
"ticket_count": 2,
"promo_code": ""
}
# リクエスト実行
api_result = requests.get(test_endpoint, params=test_parameters)
# レスポンス検証
if api_result.status_code == 200:
response_body = api_result.json()
if response_body["result"]:
print("正常処理:予約成功")
else:
print("処理失敗:", response_body["msg"])
else:
print("HTTPエラー:", api_result.status_code)
2. パラメータ付きリクエストテスト
# 割引コード適用テスト
discount_test_params = {
"event_date": "2024-01-20",
"venue": "東京ドーム",
"ticket_count": 1,
"promo_code": "SUMMER2024"
}
response = requests.get(test_endpoint, params=discount_test_params)
if response.status_code == 200:
result_data = response.json()
print("割引適用結果:", "成功" if result_data["result"] else "失敗")
else:
print("通信エラー発生")
3. 不正エンドポイントテスト
# 存在しないAPIテスト
invalid_url = "https://api.example.com/invalid_path"
error_test = requests.get(invalid_url, params=test_parameters)
if error_test.status_code != 200:
print("想定通りのエラー応答:", error_test.status_code)
4. 注文確定処理テスト
# 予約→注文確定フロー
reservation = requests.get(test_endpoint, params=test_parameters)
if reservation.status_code == 200:
reserve_data = reservation.json()
if reserve_data["result"]:
print("仮予約成功")
# 注文確定処理
confirm_payload = {
"reservation_id": reserve_data["reservation_id"],
"order_ref": reserve_data["order_number"],
"amount": reserve_data["total_fee"],
"notes": "チケット購入"
}
order_result = requests.post(reserve_data["confirm_url"], data=confirm_payload)
order_details = order_result.json()
print("注文状態:", order_details["order_status"])
print("注文内容:", order_details["order_details"])
else:
print("仮予約失敗")