Как я обрабатываю ошибки или плохие запросы в моих направляющих REST API?

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

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

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

10
задан Kyle Kaitan 29 July 2010 в 00:53
поделиться

2 ответа

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

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

13
ответ дан 3 December 2019 в 21:19
поделиться

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

around_filter :my_filter

private
def my_filter
  begin
    yield
  rescue
    render :js => ...
  end
end
4
ответ дан 3 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: