如何处理Rails REST API中的错误或错误请求?

时间:2010-07-29 00:53:41

标签: ruby-on-rails ruby api

我有一个包含JSON API接口的Rails应用程序。正确指定值后,控制器可以正常处理快乐路径,并将JSON呈现为输出。

但是,如果输入有问题,则会引发异常,并且会呈现rescues中的某些模板。我真的只想沿{ "error": { "msg": "bad request", "params": ... } }行和相应的HTTP状态代码返回JSON错误(例如,如果未经过身份验证,则返回403)。但我只希望这适用于针对example.com/api/...中的任何内容的请求。

我该怎么做?

3 个答案:

答案 0 :(得分:13)

我有一个类似的情况,但我单独救出了各个API方法,因为我需要特定于方法的错误,我也可以根据错误类型进行多次救援。

在我的应用程序控制器中,我有一个方法:

def error(status, code, message)
  render :js => {:response_type => "ERROR", :response_code => code, :message => message}.to_json, :status => status
end

然后在我的API控制器中

def some_method
  ## do stuff
rescue
  error(500, method_specific_error_code, "it all done broke")
  ## additional error notifications here if necessary.
end

因为我救了错误,我需要显式调用hoptoad api。

为了处理身份验证,我before_filter

login_required
def login_required
  error(403, 403, "Not Authenticated") unless authenticated
end

拯救404错误:

def render_404
  error(404, 404, "Unknown method")
end

我希望这有帮助!

答案 1 :(得分:4)

你的api控制器上around_filter怎么样?像

这样的东西
around_filter :my_filter

private
def my_filter
  begin
    yield
  rescue
    render :js => ...
  end
end

答案 2 :(得分:1)

def create

    res= 
    RestClient::Request::Execute(params{},headers,success_url,  
failure_url) 

   if res. response_type = 200

       redirect_to success_url

   else

       redirect_to failure_url

   end

end

如果有任何错误,它将被重定向到失败的URL,否则将成功的URL