我有一个“软件即服务”应用程序,它使用通过 RESTful API 通信的 JSON。
简单地说:当使用带有 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 中呈现一个错误页面。但是 HTML 对于期待 JSON 的客户端来说是无用的。
我可以通过将 Mumble.find() 包装在一个begin ... rescue RuntimeError
块中并呈现 JSON 状态 => :unprocessable_entity 或其他东西来解决这个问题。
但是,如果客户端的应用程序发送无效路径怎么办,例如:
http://www.myhost.com/badtypo/1.json
基于 JSON 的应用程序是否应该捕获并返回 JSON 错误?如果是这样,我在哪里可以捕获它而不深入挖掘 ActionDispatch?
所以总的来说,如果出现错误,我是否应该让 ActionController 生成 HTML?感觉不对啊……