Как обрабатывать ошибки или неудачные запросы в Rails Rails API?
У меня есть приложение Rails, которое включает интерфейс API JSON. Когда значения правильно указаны, контроллер обрабатывает счастливый путь только отлично, а JSON отображается как вывод.
Однако, если есть проблема с входом, возникает исключение, и вместо этого отображаются некоторые шаблоны в rescues
. Мне бы очень хотелось вернуть ошибку JSON в строках { "error": { "msg": "bad request", "params": ... } }
и соответствующий код состояния HTTP (например, 403, если они не были аутентифицированы). Но я хочу, чтобы это применимо к запросам на что-либо в example.com/api/...
.
Как я могу это сделать?
Ответы
Ответ 1
У меня был похожий случай, но я спасал отдельные методы 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
Надеюсь, это поможет!
Ответ 2
Как насчет around_filter
на вашем контроллере api. Что-то вроде
around_filter :my_filter
private
def my_filter
begin
yield
rescue
render :js => ...
end
end
Ответ 3
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