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

9. HTTP Methods for Distributed Authoring (分散オーサリングのためのHTTPメソッド)

本章では、WebDAVによって定義されたHTTPメソッドと既存のHTTPメソッドの拡張について説明します。

WebDAVメソッド概要

メソッド目的対象
PROPFINDリソースプロパティの取得リソースまたはコレクション
PROPPATCHリソースプロパティの変更リソース
MKCOLコレクションの作成未マップURL
COPYリソースのコピーソースと宛先
MOVEリソースの移動/名前変更ソースと宛先
LOCKリソースのロックリソースまたはコレクション
UNLOCKリソースのロック解除ロックされたリソース

9.1 PROPFIND メソッド

PROPFINDは、Request-URIで識別されるリソースに定義されたプロパティを取得します。

リクエストタイプ

  • propname: すべてのプロパティ名を取得
  • allprop: すべてのプロパティを取得
  • prop: 特定のプロパティを取得
  • allprop + include: すべてのプロパティと追加のプロパティを取得

リクエスト例

PROPFIND /file HTTP/1.1
Host: example.com
Depth: 0

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop>
<D:displayname/>
<D:getcontentlength/>
</D:prop>
</D:propfind>

レスポンス: プロパティ値を含む207 Multi-Status

Depthヘッダー

  • Depth: 0 - 対象リソースのみ
  • Depth: 1 - 対象と直接メンバー
  • Depth: infinity - 対象とすべての子孫

9.2 PROPPATCH メソッド

PROPPATCHはリソースのプロパティを変更します。

操作

  • set: プロパティの作成または更新
  • remove: プロパティの削除

PROPPATCH /file HTTP/1.1
Host: example.com

<?xml version="1.0" encoding="utf-8" ?>
<D:propertyupdate xmlns:D="DAV:">
<D:set>
<D:prop><D:displayname>新しい名前</D:displayname></D:prop>
</D:set>
<D:remove>
<D:prop><D:author/></D:prop>
</D:remove>
</D:propertyupdate>

原子性: すべての操作はまとめて成功または失敗しなければなりません (MUST)。

9.3 MKCOL メソッド

MKCOLは、Request-URIに新しいコレクションリソースを作成します。

MKCOL /new-collection/ HTTP/1.1
Host: example.com

要件

  • Request-URIは未マップURLでなければなりません (MUST)
  • 親コレクションが存在しなければなりません (MUST)
  • リクエストボディは空であるべきです (SHOULD)

ステータスコード

  • 201 Created - コレクションが正常に作成された
  • 403 Forbidden - URLにリソースが既に存在する
  • 409 Conflict - 親コレクションが存在しない

9.4 コレクションに対するGET、HEAD

コレクションに適用されると、GETとHEADは以下を返すことができます (MAY):

  • HTMLディレクトリリスト
  • コレクションメンバーリスト
  • 空のボディ

動作は実装固有です。

9.5 コレクションに対するPOST

コレクションに対するPOSTは、メンバーを追加するために使用されます。サーバーが新しいメンバーのURLを決定します。

9.6 DELETE メソッド

DELETEは、Request-URIで識別されるリソースを削除します。

コレクションの場合

  • コレクションとすべてのメンバーを再帰的に削除
  • Depth: infinityヘッダーが省略された場合、動作はDepth: infinityと同等

部分失敗: いずれかのメンバーの削除が失敗した場合、操作全体が失敗します(原子性が必要)。

9.7 PUT メソッド

PUTはリソースを作成または更新します。

書き込みロックとの相互作用

  • ターゲットがロックされている場合、クライアントはIfヘッダーで適切なロックトークンを送信しなければなりません (MUST)
  • 未マップURLでLOCKが使用された場合、ロックヌルリソースを作成

9.8 COPY メソッド

COPYは、ソースリソースの複製を宛先に作成します。

ヘッダー

  • Destination: ターゲットURL(必須)
  • Depth: 0またはinfinity(デフォルト:infinity)
  • Overwrite: T(true)またはF(false)(デフォルト:T)

COPY /source HTTP/1.1
Host: example.com
Destination: http://example.com/dest
Overwrite: F

動作

  • リソースコンテンツとデッドプロパティをコピー
  • ライブプロパティはその定義に従って処理
  • コレクションのコピーは再帰的(Depth: infinity)
  • ロックはコピーされない

ステータスコード

  • 201 Created - 宛先が作成された
  • 204 No Content - 宛先が上書きされた
  • 207 Multi-Status - 部分的成功
  • 412 Precondition Failed - Overwrite: Fで宛先が存在

9.9 MOVE メソッド

MOVEは論理的にCOPY + DELETEと同等です。

MOVE /old-location HTTP/1.1
Host: example.com
Destination: http://example.com/new-location

動作

  • リソースを宛先に移動
  • リソースを参照するすべてのURLを更新
  • プロパティは保持される
  • ソースのロックは削除される
  • 移動後、宛先はロックされない

原子性: MOVE操作は原子的でなければなりません (MUST)。

9.10 LOCK メソッド

LOCKはリソースにロックを取得します。

ロックタイプ

  • 排他書き込みロック: 1つのプリンシパルのみが保持可能
  • 共有書き込みロック: 複数のプリンシパルが保持可能

LOCK /resource HTTP/1.1
Host: example.com
Timeout: Second-3600

<?xml version="1.0" encoding="utf-8" ?>
<D:lockinfo xmlns:D="DAV:">
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
<D:owner>
<D:href>http://example.com/user</D:href>
</D:owner>
</D:lockinfo>

レスポンス: ロックトークンを含むlockdiscoveryプロパティを持つ200 OK。

ロックリフレッシュ: Ifヘッダーにロックトークンを含め、ボディなしでLOCKを送信。

9.11 UNLOCK メソッド

UNLOCKは、ロックトークンで識別されるロックを削除します。

UNLOCK /resource HTTP/1.1
Host: example.com
Lock-Token: <opaquelocktoken:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7>

要件

  • Lock-Tokenヘッダーにロックトークンを含める必要があります (MUST)
  • ロック作成者または特権プリンシパルのみがロック解除可能

ステータスコード

  • 204 No Content - ロックが正常に削除された
  • 409 Conflict - リソースがロックされていなかった
  • 423 Locked - 異なるトークンでロックされている

完全なメソッド仕様、エラー処理、詳細な例については、RFC 4918のセクション9.1-9.11を参照してください。