Appearance
API-001-18 遅延ブロック HTML warm
概要
日別記事の遅延ブロック完成 HTML を Transient(daily_article_block_html_v1_)に埋める。レスポンスに HTML は載せない。既存の共有データ L2 warm(API-001-10)とは別エンドポイントで、UI REST の開始ゲートには使わない。
対象ブロック: MailImage(バッチ)・MoveDayHall(バッチ)・関連日・kishu_count_delta・ランキング・末尾・ヒートマップ簡易(PC キー)。kishudata はテンプレの機種 ID がリクエストに含まれないため本 warm では埋めず、UI REST(API-001-14)の get/set に依存する。ヒートマップ詳細は対象外。SP 向け簡易キーは本 warm では埋めない。
完成 HTML がすでに Transient にある hall×block は描画せず ok として数え、欠けている組み合わせだけ描画する(Issue #3979)。全件揃っていればレンダラも共有データ L2 warm も呼ばない。存在確認は UI REST と同じキーで行う(キーはログイン状態に依存しない)。MoveDayHall バッチはホール一覧が L2 warm のキーにも使われるため、欠けがあるときも全ホールを渡す(キャッシュ済みホールはバッチ内で描画されない)。
入力(リクエスト)
| param | 必須 | 型・制約 | 説明 |
|---|---|---|---|
date | はい | YYYY-MM-DD | 対象日 |
halls | はい | 英字スラッグの配列、またはカンマ区切り CSV | ページ全体のホール一覧(Twig の data-warm-halls と同一。API-001-10 と同じ入力契約) |
POST ボディは JSON(Content-Type: application/json)を推奨。
出力(レスポンス)
成功時 data
| field | 型 | 説明 |
|---|---|---|
success | boolean | true |
warmed | boolean | true(処理完了。部分失敗でも true) |
count | object | { "ok": int, "failed": int } 成功/失敗件数 |
HTTP ステータス: 200(部分失敗でも成功レスポンス。count で把握する)
失敗・エラー条件
| 条件 | レスポンス形式 |
|---|---|
| バリデーションエラー(halls 空など) | { "success": false, "error": { "message": "..." } }(400) |
| nonce 不正 / レート制限超過 | WordPress REST 標準(nonce 不正は 403、レート制限超過は 429) |
| サーバー内部エラー | { "success": false, "error": { "message": "..." } }(500) |
クライアント(JS orchestrator)
実装: core_src/View/templates/daily_article_result/daily_article_orchestrator.js。
- ページ読み込み直後に API-001-10 と並列で POST する(MailImage バッチと同様、L2 warm 完了を待たない)。
- UI REST の開始条件には含めない(warm 成否でゲートしない)。
- 失敗時は
console.warnのみ(現訪問の UI REST は従来どおり)。
権限・nonce
名前空間共通事項は API-一覧 を参照。本エンドポイントは API-001-10 と同様、AsyncLoadingHandler + WordPressAsyncLoadingPermissionChecker(nonce + IP レート制限)を使用する。
レート制限は読み取り系 GET とは別の warm バケット(IP ごと 60 秒 60 回。API-001-10 と API-001-18 で共有)で数え、カウンタを取れないときは拒否する(Issue #3865 / #3938)。詳細は REST API レート制限の IP アドレス取得設定。