4

項目のフィールド(状態)を更新(!) する、より RESTFul で柔軟で優れたアプローチは何でしょうか?

/api/v1/items/:id?action=start 
/api/v1/items/:id/start 
/api/v1/items/:id/ + action in the body
/api/v1/items/:id/status/{active|stopped}

またはアイテム

/api/v1/items?action=start 
/api/v1/items/start 
/api/v1/items/ + action in the body
/api/v1/items/status/{active|stopped}  
4

3 に答える 3

5

私は 3 番目の API 構造を好みます。

/api/v1/items/:id/ + action in the body

私の理由は次のとおりです。

  • リチャードソン成熟度モデルによると、URL は特定のリソースまたはリソースのセットを指す必要があります。URL 内に更新情報を追加する必要はありません。有効なエンドポイントとしての資格がないためです。
  • リソースに影響する更新/置換操作に PUT を使用したい。URL でリソースを選択し、本文で更新する正確なフィールドを定義し、それ以外の場合はその他のロジックを定義します。
  • クエリ文字列ではなく本体を使用すると、操作と論理的にペアになる可能性のある(特定の制限まで、クエリ文字列よりも大きい)任意の大きな情報を挿入できます(あなたのケースで開始)。これにより、将来の運用の拡張にも柔軟に対応できます。
  • の応答内のエンドポイントで実行できる関連アクションを一覧表示できる可能性があります/api/v1/items。これは、有益なハイパーメディア コントロールのリストになります。繰り返しますが、リチャードソンの成熟度モデルは非常に良い例です。
于 2013-10-01T04:52:18.223 に答える
0

質問を言い換えましょう: リソースのいくつかの属性を変更するにはどうすればよいですか。(ステータスは単なる別の属性です)

答え:

リソースを識別します。

将来、このリソースのステータスだけでなく、さらに多くの属性を変更する必要が生じる可能性があるため、本文で POST (リクエストがべき等でないため) 供給を使用します。

POST /api/v1/items/:id + 本体のアクション

POSTメソッドのみを使用します。

理由: Putは、1 つまたは部分的なプロパティではなく、プロパティの完全なセットを変更する場合に使用する必要があります。

どうぞ、先に進みましょう。HTTP の状態変化ごとに PUT を使用する必要はありません。REST は、そうすべきだと言ったことはありません。POST を使用しても問題ありません - roy t fielding

于 2013-10-01T06:00:44.597 に答える