как обрабатывать исключения в коде RESTful на основе JSON?

У меня есть приложение «программное обеспечение как услуга», которое использует JSON, передаваемое через RESTful API.

Проще говоря :, каковы наилучшие методы для захвата и сообщения об исключениях при использовании RESTful API с обменом данными JSON?

Моей первой мыслью было посмотреть, что делает Rails, создавая каркас, но это явно неправильно. Вот отрывок:

class MumblesController < ApplicationController

  # GET /mumbles/1
  # GET /mumbles/1.json
  def show
    @mumble = Mumble.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @mumble }
    end
  end

end

В этом случае, если код JSON отправляет несуществующий идентификатор -, например.

http://www.myhost.com/mumbles/99999.json

то Mumble.find ()поднимет ActiveRecord ::RecordNotFound. ActionController поймает это и отобразит страницу ошибки в HTML. Но HTML бесполезен для клиента, ожидающего JSON.

Я мог бы обойти это, обернув Mumble.find ()в блок begin... rescue RuntimeErrorи визуализировав объект JSON status => :unprocessable _или что-то в этом роде.

Но что тогда, если клиентское приложение отправляет неверный путь, например.:

http://www.myhost.com/badtypo/1.json

Должно ли приложение на основе JSON улавливать это и возвращать ошибку в JSON? Если да, то где мне это зафиксировать, не углубляясь в ActionDispatch?

Итак, в целом, могу ли я разрешить ActionController генерировать HTML в случае ошибки? Это неправильно...

33
задан fearless_fool 8 August 2012 в 07:12
поделиться