Multi-Status

状態符号 207 (HTTP)

[31] 207 は、複数の資源に対する処理の結果の応答を1つにまとめたものを表す状態符号です。

仕様書

意味

[6] 207 応答は、複数の資源があって複数の状態符号が適切であろう場合にその情報を伝えるものです >>5

[9] 2072xx、すなわち成功に分類されてはいますが、 含まれる個々の結果は成功とは限らず、部分的な成功だったり、失敗だったりします >>5

構文

[17] 207 応答では Location: ヘッダーを使うと URL の解釈が曖昧になる >>5 として、 その用法は意図的に未定義 >>5 とされています。

[18] なぜ禁止しないのかは謎ですが・・・。

[7] 既定の payload bodytext/xml または application/xml で、 multistatus 要素根要素であるものです >>5

XML MIME型も参照。
  1. multistatus

[10] DAV: 名前空間multistatus 要素は、 根要素として使用して >>5 複数の応答を束ねるもの >>20 で、 要素内容 >>20 として0個以上の response 要素 >>5, >>20 と省略可能な responsedescription 要素 >>20 を含むことができます。

[12]response 要素 >>5 および responsedescription 要素の順序は任意です。 >>5, >>22

[11] response 要素は各資源についての情報を含めたものであり、 それぞれの資源を識別する href 要素を含まなければなりません >>5

[13] response 要素にはその他に status 要素propstat 要素を含めます >>5

  1. href
  2. |
    1. status
    2. propstat
  3. ?
    1. location

[1] 応答中で用いる URL については構文上の制約があります。

単純参照を参照。

[14] status 要素は、 href 要素で指定された資源について操作を実行した結果の状態を示します >>5

[15] ここで使う状態符号要求メソッドの定義で明示的に規定されていることもありますが、 クライアントはそれ以外であっても HTTP の規則に従って処理できなければなりません >>5

[16] propstat 要素は、 PROPFINDPROPPATCH で使用します >>5href 要素で指定された資源の個々の特性についての情報を表します >>5

[8] response 要素内では 2xx, 3xx, 4xx, 5xx状態符号を使います。 1xx は使うべきではありません>>5

[19] 3xx を使う場合には、リダイレクト先のURLlocation 要素によって記述できます。

3xxlocation を参照。

文脈

[24] 207 応答 / multistatus 要素は、 PROPFIND 要求に対する応答で使われます >>23

[26] 207 応答 / multistatus 要素は、 PROPPATCH 要求 >>25DELETE 要求 >>27COPY 要求 >>28MOVE 要求 >>29LOCK 要求 >>30 に対する応答で使うことがあります。

[32] 理論上は WebDAV 以外でも使えるはずですが、実際には WebDAV 以外で使われるところは見たことがありません。全体としては成功とみなして 200 で実行状況詳細を説明した JSON を返したり、 全体として失敗と考えて 400 などを返したりするものと思われます。 (どちらが適切かは応用によって違いそうです。)

歴史

[3] RFC 2518 (WebDAV) 10.2 207 Multi-Status

The 207 (Multi-Status) status code provides status for multiple independent operations (see section 11 for more information).

207 (複数状態) 状態符号は、複数の独立の操作に対する状態を提供します。

[4] RFC 2518 11 Multi-Status Response

The default 207 (Multi-Status) response body is a text/xml or application/xml HTTP entity that contains a single XML element called multistatus, which contains a set of XML elements called response which contain 200, 300, 400, and 500 series status codes generated during the method invocation. 100 series status codes SHOULD NOT be recorded in a response XML element.

既定の 207 (複数状態) 応答本体は text/xml 又は application/xml の HTTP 実体本体で、 multistatus という単一の XML 要素を含んでおり、その要素は response という XML 要素の集合で、この要素は method の呼び出しの過程で生成された 200, 300, 400, 500 の系列の状態符号を含みます。 100 系列の状態符号は record XML 要素中に記録するべきではありません

[21] RFC 2518 (WebDAV) 12.9 multistatus XML Element
Name
multistatus
Namespace
DAV:
Purpose
Contains multiple response messages.
Description
The responsedescription at the top level is used to provide a general message describing the overarching nature of the response. If this value is available an application may use it instead of presenting the individual response descriptions contained within the responses.
目的
複数の応答メッセージを含める
説明
最上位の responsedescription は、応答の支配的性質を説明する一般的メッセージを提供するのに使います。 この値が利用可能な場合応用は response 中の個々の応答説明を提示する代わりにこの値を使って構いません。

<!ELEMENT multistatus (response+, responsedescription?) >

[33] RFC 3648 - Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol () <https://tools.ietf.org/html/rfc3648#section-7>

[34] RFC 4791 - Calendaring Extensions to WebDAV (CalDAV) () <https://tools.ietf.org/html/rfc4791#section-5.3.1.1>

[35] RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH () <https://tools.ietf.org/html/rfc5323#section-2.3>

[36] Zalando RESTful API と イベントスキーマのガイドライン () <https://restful-api-guidelines-ja.netlify.com/>

バッチ/バルクリクエストには、 常に ステータスコード 207 を返さなければならない。 ただし個々のパートを処理する前にエラーが発生した場合はその限りではない。

バッチ/バルクレスポンスは、 常に バッチ/バルクリクエストの各パートに関する十分なステータスと モニタリング情報を含む、複数状態をもつオブジェクトを、ステータスコード207とともに返す。