レールに次のコントローラーがあるとします。
class AccountsController < ApplicationController
respond_to :json, :xml
def update
@account = Account.where(uuid: params[:id]).first
unless @account.nil?
if @account.update_attributes params[:account]
respond_with @account, location: account_url(@account)
else
respond_with error_hash, status: :unprocessable_entity, root: :error, location: api_account_url(@account)
end
else
respond_with error_hash, status: :not_found, root: :error, location: accounts_url
end
end
def error_hash
{ :example => "Example for this question", :parameter => 42 }
end
end
PUT
/accounts/update/ へのリクエストが次のことを行うことを期待します
- ID が存在し、update_attributes 呼び出しが成功した場合は、
204 (No Content)
成功メッセージを配信します。(私は @account を返すように設定しています。これは素晴らしいことですが、大したことではありません。ここでは 204 で問題ありません。) - ID は存在するが、データが正しくない場合は
422 (Unprocessable Entity)
、エラーを表す xml/json と共にエラー メッセージを配信します。 - ID が存在しない場合は、
404 (Not Found)
エラーを表す xml/json と共にエラー メッセージを配信します。
実際に起こることは次のとおりです。
- ボディなしで204を届けます。
- ボディなしで204を届けます。
- ボディなしで204を届けます。
何で俺のステータスも身体も無視するんだ?私は、GET
うまく機能するリクエストに対して同様のセットアップを行いました(正しいステータス、正しい本文)。
リクエストの例CURL
(存在しない ID の場合):
PUT
リクエスト
curl -i --header "Accept: application/xml" --header "Content-type: application/json" -X PUT -d '{"name": "whoop"}' http://localhost:3000/api /アカウント/3d2cc5d0653911e2aaadc82a14fffee9 HTTP/1.1 204 コンテンツなし 場所: http://localhost:3000/api/accounts X-Ua対応: IE=Edge キャッシュ制御: キャッシュなし X-Request-Id: bf0a02f452fbace65576aab6d2bd7c1e X ランタイム: 0.029193 サーバー: WEBrick/1.3.1 (Ruby/1.9.3/2013-01-15) 日付: 2013 年 1 月 24 日 (木) 08:01:31 GMT 接続: 閉じる セット Cookie: _bankshare_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRkkiJWFmNmI2MmU0MzViMmE3N2YzMDIzOTdjMDJmZDhiMzEwBjsAVA%3D%3D--133e394eb760a7fce07f1fd51349dc46c2d51626; パス=/; HttpOnly
GET
リクエスト
curl -i --header "Accept: application/json" --header "Content-type: application/json" -X GET http://localhost:3000/api/accounts/3d2cc5d0653911e2aaadc82a14fffee9 HTTP/1.1 404 が見つかりません コンテンツ タイプ: アプリケーション/json; 文字セット=utf-8 X-Ua対応: IE=Edge キャッシュ制御: キャッシュなし X リクエスト ID: 9cc0d1cdfb27bb86a206cbc38cd75473 X ランタイム: 0.005118 サーバー: WEBrick/1.3.1 (Ruby/1.9.3/2013-01-15) 日付: 2013 年 1 月 24 日 (木) 08:19:45 GMT コンテンツの長さ: 116 接続: キープアライブ {"Friendly-status":"not-found","status":404,"message":"ID '3d2cc5d0653911e2aaadc82a14fffee9' のアカウントが見つかりません"}