私は顧客管理システム用のRESTfulサービスを作成しており、レコードを部分的に更新するためのベストプラクティスを見つけようとしています。たとえば、呼び出し元がGETリクエストでレコード全体を読み取れるようにしたいとします。ただし、更新の場合、ステータスをENABLEDからDISABLEDに変更するなど、レコードに対する特定の操作のみが許可されます。(これよりも複雑なシナリオがあります)
セキュリティ上の理由から、更新されたフィールドのみを含むレコード全体を発信者に送信してほしくありません(また、やり過ぎのように感じます)。
URIを構築するための推奨される方法はありますか?RESTブックを読むとき、RPCスタイルの呼び出しは不快に思われます。
次の呼び出しがID 123の顧客の完全な顧客レコードを返す場合
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
ステータスを更新するにはどうすればよいですか?
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
更新:質問を補足します。「ビジネスロジックコール」をREST APIに組み込むにはどうすればよいですか?これを行うための合意された方法はありますか?すべてのメソッドが本質的にCRUDであるとは限りません。いくつかは'のような、より複雑なsendEmailToCustomer(123) '、 ' mergeCustomers(123、456) '、 ' countCustomers() '
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POST
ロイフィールディング自身からの投稿です:roy.gbiv.com/untangled/2009/it-is-okay-to-use-post基本的な考え方は、オペレーションの使用に理想的に適したメソッド(GET
またはなどPUT
)ではありませんPOST
。