我有一个使用RESTful API进行JSON通讯的"软件即服务"应用程序。
简单地说:在使用RESTful API和JSON数据交换时,捕获和报告异常的最佳实践是什么?
我的第一个想法是查看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是无用的。
我可以通过将Mumble.find()放入begin ... rescue RuntimeError
块中,并呈现一个JSON状态=> :unprocessable_entity或类似的内容来解决这个问题。
但如果客户端应用程序发送了无效路径,例如:
http://www.myhost.com/badtypo/1.json
一个基于 JSON 的应用是否应该捕获并返回 JSON 格式的错误信息?如果需要,我应该在哪里进行捕获而不需要深入到 ActionDispatch 中?
总的来说,如果出现错误,我是放弃让 ActionController 生成 HTML 还是做其他的处理?但这样做感觉不太对劲...
rescue_from
中匹配的顺序与常规的rescue
相反:如果您想要子类和其父类有不同的行为,请将子类放在父类之后:-/
。 - AlexChaffee