メインコンテンツまでスキップ

リクエストボディサイズおよび push user_ids 件数の上限化

API 全体のミューテーション系エンドポイントで、リクエストボディの上限と一部リクエストフィールドの件数 / サイズ上限を契約として導入しました。マルチテナント基盤の防御強化が目的で、既存テナントの正規利用には影響しません。

破壊的変更

  • 413 Payload Too Large ステータスを追加 — エンドポイント別のリクエストボディ上限を超えると返します。本ステータスは HTTP プロトコル層で評価されるため、Content-Length を省略した chunked transfer encoding でも回避できません。RFC 7807 Problem Details として type: https://storyhub.studio/probs/payload-too-large を返します。
  • POST /v1/push-candidatesuser_ids 件数上限target_mode=manual 時の user_ids 配列は最大 100,000 件に制限されます。超過時は 400 Validation を返します。各エントリは /v1/eventsuser_id と同じ文字種ルール(^[A-Za-z0-9._:@|+=\-]{1,128}$、最大 128 文字)に従う必要があります。違反時も 400 を返します。
  • POST /v1/eventsmetadata サイズ上限 — 各イベントの metadata はシリアライズ後 4096 バイト以下である必要があります。超過時は 400 Validationmetadata: must not exceed 4096 bytes)を返します。
  • POST /v1/push-candidates 専用レート制限 — プラン共通レート制限に加えて、専用の低 RPS リミッター(目安 1 RPS / burst 5)が適用されます。

エンドポイント別のボディサイズ上限

エンドポイント上限
POST /v1/events2 MiB
POST /v1/push-candidates8 MiB
PUT /v1/users/{user_id}64 KiB
PATCH /v1/users/{user_id}64 KiB
PUT | DELETE /v1/users/{user_id}/sources/{source_id}/(block|follow)4 KiB

影響

  • 上限値は API の正規利用において十分な余裕を持って設定されており、通常のリクエストパターンへの破壊的影響はありません。
  • 100,000 件を超えるユーザーへ target_mode=manual で配信する必要がある場合は、リクエストを複数バッチに分割するか target_mode=condition の活用を検討してください。
  • 413 ハンドリングがクライアント側で未実装の場合、上限超過は既存の 400 系ロジックでなく新ステータスとして表面化します。Exponential Backoff によるリトライ対象外です(リクエストサイズの調整が必要)。

詳細は エラーハンドリング行動イベントプッシュ候補レート制限 をご覧ください。