Настройка ошибок API для Rails 3, таких как Github api v3 - PullRequest
8 голосов
/ 06 мая 2011

Я добавляю API в приложение Rails3, и оно довольно хорошо работает. Но я видел следующий Github api v3 на http://developer.github.com/v3/

HTTP/1.1 422 Unprocessable Entity
 Content-Length: 149

 {
   "message": "Validation Failed",
   "errors": [
     {
       "resource": "Issue",
       "field": "title",
       "code": "missing_field"
     }
   ]
 }

Мне понравилась структура сообщений об ошибках. Но не мог заставить это воспроизвести. Как я могу сделать мой apis, чтобы сделать ответ как это?

1 Ответ

2 голосов
/ 07 мая 2011

Вы можете легко достичь этого формата ошибок, добавив ActionController :: Responder для вашего формата JSON.См. http://api.rubyonrails.org/classes/ActionController/Responder.html (крайне расплывчатую) документацию по этому классу, но в двух словах вам необходимо переопределить метод to_json.

В приведенном ниже примере я вызываю закрытый метод вActionController: ответчик, который будет создавать ответ json, включая настроенный ответ на ошибку по вашему выбору;все, что вам нужно сделать, это заполнить пробелы, на самом деле:

def to_json
  json, status = response_data
  render :json => json, :status => status
end

def response_data
  status = options[:status] || 200
  message = options[:notice] || ''
  data = options[:data] || []

  if data.blank? && !resource.blank?
    if has_errors?
      # Do whatever you need to your response to make this happen.
      # You'll generally just want to munge resource.errors here into the format you want.
    else
      # Do something here for other types of responses.
    end
  end

  hash_for_json = { :data => data, :message => message }

  [hash_for_json, status]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...