リクエストボディサイズおよび 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-candidatesのuser_ids件数上限 —target_mode=manual時のuser_ids配列は最大 100,000 件に制限されます。超過時は400 Validationを返します。各エントリは/v1/eventsのuser_idと同じ文字種ルール(^[A-Za-z0-9._:@|+=\-]{1,128}$、最大 128 文字)に従う必要があります。違反時も400を返します。POST /v1/eventsのmetadataサイズ上限 — 各イベントのmetadataはシリアライズ後 4096 バイト以下である必要があります。超過時は400 Validation(metadata: must not exceed 4096 bytes)を返します。POST /v1/push-candidates専用レート制限 — プラン共通レート制限に加えて、専用の低 RPS リミッター(目安 1 RPS / burst 5)が適用されます。
エンドポイント別のボディサイズ上限
| エンドポイント | 上限 |
|---|---|
POST /v1/events | 2 MiB |
POST /v1/push-candidates | 8 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 によるリトライ対象外です(リクエストサイズの調整が必要)。