2017-08-21 8 views
0

私はそれを無効にするために状態を変更する必要があるエンティティを持っています。この無効化のプロセスは、他の関連するエンティティについても一連のアクション(cronジョブではない)を引き起こします。HTTP RESTの規則:POST、PUT、またはPATCH?

私はこのフォームでAPIのURLを保持している:ここで

https://<base_url>/version/<entity_name>/<entity_id>/deactivate 

は私の質問です:それは、POST、PUTまたはPATCHリクエストべきか?それらのそれぞれの

引数:

1)POST:http://restful-api-design.readthedocs.io/en/latest/methods.html#actions

2)PATCH:untimately私たちは、このエンティティのいくつかの属性といくつかの他の関連するエンティティを変更しているので。したがって、パッチ。

3)PUT:私の同僚の一人は、PUTする必要があると言います。

答えて

1

最初に理解しなければならないのは、POSTがfineです。われわれはPOSTをhtmlフォームで使いこなしてきたが、それは仕事を終わらせる。

PUTとPATCHは、変更をリモートシステムに伝達するための代替方法です。リモートオーサリングを考える。私の一般的な編集ツールは、GETを送信してリソースの現在の表現を取得し、それを変更して新しい表現を送り返すことができるという基本的な考え方です。

返された表現が編集済みの完全なコピーである場合、オーサリングツールはPUTを使用する必要があります。返される表現がパッチだけの場合、オーサリングツールはPATCHを使用する必要があります。

注:私のオーサリングツールは一般的です。それが伝える限り、それはドキュメントストアに話しています。ですから、APIを定義する上でのあなたの仕事は、ドキュメントストアのふりをすることです。エンティティを不活性化する

実際の作業は、「ドキュメントストア」の統合リソースの操作の副作用です。

エンティティの現在の状態をド​​キュメントで表現することができます。エンティティの状態が「非アクティブ」に変更された状態でドキュメントのコピーが返された場合は、それをtrueにすることができますエンティティ。同様に、7行目を有効化から無効化に変更するよう指示する本文の指示に従って、PATCHを送信した場合も同じことができます。

選択肢は、すべてあなたがPOSTのセマンティクスに適合していることを提供し、優れている、とRFC 5789で説明したようにRFC 7231またはPATCHで説明したようにPUTは:PUTの冪等する必要があり、PATCHはそうでは不可分であることが必要であり、 。

関連する問題