Skip to content

Latest commit

 

History

History
54 lines (39 loc) · 2.58 KB

File metadata and controls

54 lines (39 loc) · 2.58 KB

AzurLaneServerStatus

简体中文 · 繁體中文 · 日本語 · English · 한국어

アズールレーンサーバー状態確認 API。全 7 地域・計 81 サーバーのリアルタイム状態を照会し、フロントエンド/ダッシュボードからのポーリングに対応します。

起動

uv run uvicorn main:app --host 0.0.0.0 --port 8000

API ドキュメント:http://localhost:8000/docs

エンドポイント

メソッド パス 説明
GET / キャッシュ診断ダッシュボード(サーバーサイドレンダリング、JS なし)
GET /api/v1/status 全/指定地域のサーバー詳細
GET /api/v1/summary 状態別の件数集計
GET /api/v1/regions 対応地域一覧
GET /api/v1/regions/{key} 単一地域の詳細
GET /api/v1/servers/{region}_{id} 単一サーバー(例:cn_28cn_ios_1
GET /healthz 死活プローブ

キャッシュ戦略

  • フレッシュウィンドウ 8 秒:ヒット時は直接返却し、ネットワークリクエストを送らない
  • 期限切れ後:次の照会で一度だけ更新(lazy)をトリガーし、並行リクエストは single-flight で合流
  • 継続的に照会なし:バックグラウンドタスクが 5 秒ごとにキープアライブ更新し、キャッシュは期限切れにならない
  • 更新失敗:古いキャッシュ(期限切れ含む)を再利用 + error マーク;キャッシュがない場合のみエラー

セキュリティ

  • 同一 IP から並行 10 を超えると 429 を返す(ASGI ミドルウェア、完全非同期カウント)
  • クライアントはキャッシュを迂回できない(refresh パラメータなし)。キャッシュ自体がレートリミット層

テスト

uv run --group dev pytest tests/

プロジェクト構成

server_status_api/
├── main.py       # FastAPI アプリ、エンドポイント、レートリミットミドルウェア
├── checker.py    # プロトコル層:REGIONS 設定、TCP protobuf / HTTP JSON 照会(全面非同期)
├── cache.py      # 地域別 TTL キャッシュ + single-flight + バックグラウンドキープアライブ更新
├── models.py     # Pydantic レスポンスモデル
└── tests/        # キャッシュ単体テスト + API エンドポイントテスト(mock、実際のネットワークリクエストなし)