I have a "software as a service" app that uses JSON communicated via a RESTful API.
Simply stated: what are the best practices for capturing and reporting exceptions when using a RESTful API with JSON data interchange?
My first thought was to see what Rails does by generating a scaffold, but that's clearly not right. Here's an excerpt:
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
In this case, if the JSON code sends a non-existent ID, e.g.
http://www.myhost.com/mumbles/99999.json
then Mumble.find() will raise ActiveRecord::RecordNotFound. ActionController will catch that and render an error page in HTML. But HTML is useless to the client that is expecting JSON.
I could work around that by wrapping the Mumble.find() in a begin ... rescue RuntimeError
block and rendering a JSON status => :unprocessable_entity or something.
But then what if the client's app sends an invalid path, e.g.:
http://www.myhost.com/badtypo/1.json
Is a JSON based app supposed to catch that and return an error in JSON? If so, where do I capture that without digging deep into ActionDispatch?
So overall, do I punt and let ActionController generate HTML if there's an error? That doesn't feel right...
question from:
https://stackoverflow.com/questions/11859437/how-to-handle-exceptions-in-json-based-restful-code 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…