我在这个使用Ruby on Rails作为后端API的网站上工作,为此目的,后端错误处理的好方法是什么?
例如,如果未找到响应',如何能够稳健地返回指示此类消息的json
数据?
编辑:
添加示例和更多背景信息以澄清
例如,在后端,如果我有
def top_photos
user = User.find params[:user_id]
photos = user.photos.order(created_at: :desc)
.limit(10)
render json: user, status: 200
end
如果流程中存在任何错误,则无法找到具有给定user_id
的用户,
将json格式数据返回到前端是一个很好的做法,以便在前端处理错误?
更多背景知识:网站中已经存在50多个控制器,我可以做些什么来使变化最小化并具有适应性?
答案 0 :(得分:9)
假设您的代码如下,则可以在每个
中呈现状态user = {
name: "Tang",
id: 40
}
render :json => user.to_json, :status => :ok
热门状态代码,请查看HTTP Status Codes and RESTful API crafting:
200 :ok
201 :created
202 :accepted
400 :bad_request
401 :unauthorized
403 :forbidden
500 :internal_server_error
如果你的api有自定义路线,你可以把它放在你的" ApplicationController" (或在命名空间的主控制器中,通常是ApiController):
# CUSTOM EXCEPTION HANDLING
rescue_from StandardError do |e|
error(e)
end
def routing_error
raise ActionController::RoutingError.new(params[:path])
end
protected
def error(e)
#render :template => "#{Rails::root}/public/404.html"
if env["ORIGINAL_FULLPATH"] =~ /^\/api/
error_info = {
:error => "internal-server-error",
:exception => "#{e.class.name} : #{e.message}",
}
error_info[:trace] = e.backtrace[0,10] if Rails.env.development?
render :json => error_info.to_json, :status => 500
else
#render :text => "500 Internal Server Error", :status => 500 # You can render your own template here
raise e
end
end