Как мне обрабатывать ошибки или неправильные запросы в моем Rails REST API? - PullRequest
10 голосов
/ 29 июля 2010

У меня есть приложение Rails, которое включает интерфейс JSON API. Когда значения заданы правильно, контроллер обрабатывает счастливый путь очень хорошо, и JSON отображается как вывод.

Однако, если есть проблема с вводом, возникает исключение, и вместо него выводятся некоторые шаблоны в rescues. Мне бы очень хотелось вернуть ошибку JSON в виде строки { "error": { "msg": "bad request", "params": ... } } и соответствующий код состояния HTTP (например, 403, если они не были аутентифицированы). Но я только хочу, чтобы это было применимо к запросам против чего-либо в example.com/api/....

Как я могу это сделать?

Ответы [ 2 ]

13 голосов
/ 29 июля 2010

У меня был похожий случай, но я спасал отдельные методы 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

потому что я спасаю ошибку, мне нужно было явно вызвать api hoptoad.

Для обработки аутентификации у меня было 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

Надеюсь, это поможет!

4 голосов
/ 29 июля 2010

Как насчет around_filter на вашем контроллере API. Что-то вроде

around_filter :my_filter

private
def my_filter
  begin
    yield
  rescue
    render :js => ...
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...