私は、RESTful API経由で通信されたJSONを使用する「サービスとしてのソフトウェア」アプリケーションを持っています。JSONベースのRESTfulコードで例外を処理する方法は?
JSONデータ交換でRESTful APIを使用する場合の例外のキャプチャとレポートのベストプラクティスは何ですか?
私の最初の考えは、Railsが足場を生成することを確認することでしたが、それは明らかに正しくありません。以下は抜粋です:
class MumblesController < ApplicationController
# GET /mumbles/1
# GET /mumbles/1.json
def show
@mumble = Mumble.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @mumble }
end
end
end
この場合、JSONコードが存在しないIDを送信すると、
http://www.myhost.com/mumbles/99999.json
次に、Mumble.find()はActiveRecord :: RecordNotFoundを発生させます。 ActionControllerはそれを捕捉し、HTMLでエラーページをレンダリングします。しかし、JSONを期待しているクライアントにとってHTMLは役に立ちません。
begin ... rescue RuntimeError
ブロックにMumble.find()をラップし、JSONステータス=>:unprocessable_entityなどをレンダリングすることで回避できます。
しかし、その後、どのようなクライアントのアプリケーションは、例えば、無効なパスを送る。:
http://www.myhost.com/badtypo/1.json
場合がJSONベースのアプリケーションはそれをキャッチし、JSONでエラーを返すことになっていますか?もしそうなら、ActionDispatchを深く掘り下げずにどこをキャプチャしますか?
全体的に、私はパントして、エラーがあればActionControllerにHTMLを生成させますか?それは、答えはActionControllerのを使用することです
(私は[あなたの質問を投稿]打つ直前に答えを見つけた。しかし、これは、同様に他の誰かを助けるかもしれない...)...
用心:少なくともレール4で、rescue_from' 'の一致順序は、*通常の' rescue'から*逆転されています。あなたは、サブクラスの対ごとに異なる振る舞いをしたい場合その親クラスは、サブクラス*を親の後に置いてください。 ': - /' – AlexChaffee