Apipie会干扰正确的错误代码

时间:2014-07-27 15:20:08

标签: ruby-on-rails api rest http-headers

我似乎无法在Apipie的文档中找到这一点。

我准备好了这个RESTful api,我想我会用Apipie记录它。所有精细和花花公子,以及param验证都很好,但是当验证失败时,我似乎无法让它在响应中抛出正确的HTTP代码。例如,我有这个POST / users方法,显然在我的数据库中创建了一个用户。很好,对吧?好吧,如果出现问题,它会响应422不可处理的实体,那很好,但是如果我把它扔给那些没有通过apipie验证的参数,那么就会产生窒息和抛出

这是一个很好的老式错误
Failure/Error: post '/users.json', :user => d
Apipie::ParamInvalid:
  Invalid parameter 'email' value "": Must match regular expression /[a-zA-Z0-9\-.]+\@[a-zA-Z0-9\-.]+\.[a-z]{2,}/.
# ./spec/requests/usersapi_spec.rb:66:in `block (3 levels) in <top (required)>'

假设我对email参数进行了regexp验证。相反,我非常希望它能很好地回应(可能在json中,或者用空体),并将respose的代码设置为422.

有什么想法吗?

编辑:是的,我知道我可以禁用apipie的验证,否则就这样做......

2 个答案:

答案 0 :(得分:9)

希望你已经找到了答案 - 但是如果有人想要禁用Apipie的验证 - 这就是它。

Apipie.configure do |config|
  config.validate = false
end

答案 1 :(得分:9)

您可以使用rescue_from,然后回复对您有意义的错误。

class ApplicationController < ActionController::Base

  # ParamError is superclass of ParamMissing, ParamInvalid
  rescue_from Apipie::ParamError do |e|
    render text: e.message, status: :unprocessable_entity
  end

  # ...
end