Slate Errors

Success (2xx)

207

Multi-Status

— 複数のステータス

まずは確認: よくある原因 TOP3

  1. WebDAV の PROPFIND/PROPPATCH での一括結果
    フォルダ配下の複数アイテムについて、それぞれの状態を返す
  2. 一括 COPY/MOVE の個別ステータス
    ある項目は成功、ある項目は失敗、をまとめて伝える
  3. 複数オブジェクトに対する一括操作 API
    一部成功・一部失敗を1回の応答で表現する用途

うまくいった証

207 は「いっぺんにいくつものことを頼まれたから、それぞれの結果を一覧にして返すよ」という応答です。 プールに例えると、5人がそれぞれ違うタイムで完走したあと、コーチが「Aさんはタイム合格、Bさんはあと0.5秒、Cさんは合格…」と一覧表で結果を返してくれる——あの一括報告の便利さです。

WebDAV (RFC 4918) で定義されているコードで、レスポンス本文には XML で各リソースのステータス (200/404/403 など) が並びます。一般的な REST API ではあまり使いませんが、一括処理 API を設計するときの参考になる思想です。

プールからのひとこと

プールでの記録会のあと、コーチが選手それぞれの結果を1枚の用紙にまとめて配ることがあります。「全員一律 OK」ではなく、誰がどの結果だったかを並べて見せる。一覧でぱっと見渡せるから、次の練習計画も立てやすい。

207 もそれと同じ構造で、「全体としては受け付けたが、中身は項目ごとに違う」という現実を、ひとつの応答に丁寧に詰めて返してくれる。WebDAV の世界に最適化された、まとめ役のステータスです。

次への一歩

ここから先:

  1. XML 本文を解析して各リソースの状態を確認:それぞれの code を見て成功/失敗を判定
  2. 失敗した項目だけを再試行:成功した分は再度送らない設計に
  3. クライアントへ結果サマリを表示:「N件中M件成功」のようにユーザー向けに整理
  4. REST API で似た構造を作るときの参考に (管理者向け):複数リソース一括処理は応答の設計が肝

実際にはこう見える

$ リクエスト

curl -i https://example.com/some/path

↓ レスポンス

HTTP/1.1 207 Multi-Status
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html><body><h1>207 Multi-Status</h1></body></html>

似ているケース

もっと知りたい