RESTful API を介して通信される JSON を使用する「サービスとしてのソフトウェア」アプリがあります。
簡単に言えば、JSON データ交換で RESTful API を使用するときに例外をキャプチャして報告するためのベスト プラクティスは何ですか?
私が最初に考えたのは、Rails が scaffold を生成することによって何をするかを見ることでしたが、それは明らかに正しくありません。ここに抜粋があります:
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 は役に立ちません。
Mumble.find() をbegin ... rescue RuntimeError
ブロックでラップし、JSON status => :unprocessable_entity などをレンダリングすることで、これを回避できます。
しかし、クライアントのアプリが無効なパスを送信した場合はどうなるでしょうか。
http://www.myhost.com/badtypo/1.json
JSON ベースのアプリはそれをキャッチして JSON でエラーを返すことになっていますか? もしそうなら、ActionDispatchを深く掘り下げることなく、どこでそれをキャプチャできますか?
全体として、エラーが発生した場合、パントして ActionController に HTML を生成させますか? それは気分が悪い...