非CRUD操作をRESTfulサービスに追加する「RESTful」な方法は何ですか?次のようなレコードへのCRUDアクセスを許可するサービスがあるとします。
GET /api/car/123 <- Returns information for the Car object with ID 123
POST /api/car <- Creates a new car (with properties in the request)
PUT /api/car/123 <- Updates car 123 (with properties in the request)
DELETE /api/car/123 <- Deletes car 123
POST /api/car/123/wheel/ <- Creates a wheel and associates it to car 123
車の色を変更したい場合POST /api/car/123
は、単純に新しい色のPOST変数を含めます。
しかし、車を購入したいとします。その操作は、単に「ユーザー」レコードの「所有車」プロパティを更新するよりも複雑です。POST /api/car/123/purchase
「購入」が基本的にメソッド名であるのようなことを単純に行うのはRESTful ですか?または、PURCHASE
代わりになどのカスタムHTTP動詞を使用する必要がありPOST
ますか?
または、非CRUD操作は完全にRESTの範囲外ですか?
PATCH /api/car/123
、カラーパラメータを使用PUT /api/car/123
して送信するか、車オブジェクト全体を使用して送信することをお勧めします。POSTは、新しい車を作成していると推測し、URLの末尾にIDを含めないでください