RESTfulWebサービスの274ページのセクションを理解しようとしていますHTTP PUT
。存在しないリソースに対して発行PUT
すると、リソースが作成されます。PUT
既存のリソースを移動させる場合、HTTP 301(永続的に移動)が新しい場所で返されます。古いURIへのリクエストは、HTTP 301、404、または410を返します。
私の質問は戻ることについてHTTP 301
です。これは、リソースが古いURIの所有権を永久に保持することを意味しているようです。
検討:/companies/{companyName}/departments/{departmentName}
使用することの次の利点がわかりますHTTP 301
:
- 同時実行性:あるユーザーが会社の名前を変更し、別のユーザーが部門に移動している場合、そのユーザーは何も問題がなかったにもかかわらず、HTTP404を取得します。
HTTP 301
2番目のユーザーを新しいURIにシームレスにリダイレクトできます。 - ブックマーク:人間とコンピューターの両方が、長期保存のためにURIをブックマークする必要があります。人間はディスカッションフォーラムにリンクを投稿します。コンピューターは、キャッシュの目的とユーザー設定にURIを使用します。
次の問題が発生しHTTP 301
ます:
- 長期的なリソースの進化をブロックします:その存続期間中、部門は、、および
A
に名前が変更されます。数年後、誰かが部門を作成したいと考えており、によって作成できなくなっています。公平を期すために、これが発生する実際的な例は考えられないので、おそらく問題ではありません。B
C
D
A
D
- APIバージョンはその使用を制限します:新しいAPIバージョンがリリースされ、古いバージョンが削除されると、ルートリソースでさえ時間とともに変化します。
HTTP 301
クライアントが古いリソースと同じ方法で新しいリソースにアクセスできない場合に戻るポイントは何ですか?
適切な行動方針は何ですか?URL階層を別の方法でモデル化する必要がありますか?行動/反応は異なるべきですか?