[katello-devel] Introducing ApiError in the ApiController
Lukas Zapletal
lzap at redhat.com
Thu Jul 28 13:22:23 UTC 2011
On 07/28/2011 02:39 PM, Dmitri Dolguikh wrote:
> i disagree: i think in the case of rest api, we should rely more on http
> status codes to provide more meaningful exceptions, otherwise the client
> is forced to parse our textual error messages (which is less reliable,
> language-locale dependent, etc). I'd say we should use 500 for all
> internal issues (such as db is down, out of memory, etc), i.e. issues
> where user is not at fault, and cannot do anything to correct the issue.
> If corrective action by the user is possible, we should use an
> appropriate http status code.
Yeah. I slightly reworked it. I think the code is self-describing:
module HttpErrors
class WrappedError < StandardError
attr_reader :original
def initialize(msg, original=$!)
super(msg)
@original = original
end
end
# application general errors
class AppError < WrappedError; end
class ApiError < AppError; end
# specific errors
class NotFound < WrappedError; end
class BadRequest < WrappedError; end
end
raise HttpErrors::ApiError, _("Manifest import failed")
raise HttpErrors::NotFound, _("Couldn't find xyz")
log example:
*** ERROR: user-friendly message goes here (500) ***
REQUEST URL: /api/users
HttpErrors::ApiError: user-friendly message goes here
/data/work/CloudForms/katello/src/app/controllers/api/api_controller.rb:45:in
`current_user'
/data/work/CloudForms/katello/src/lib/util/threadsession.rb:75:in
`thread_locals'
/home/lzap/.rvm/gems/ruby-1.8.7-p334 at katello/gems/activesupport-3.0.5/lib/active_support/callbacks.rb:219:in
`_ ...........
--
Later,
Lukas Zapletal | E32E400A
RHN Satellite Engineering
Red Hat Czech s.r.o. Brno
More information about the katello-devel
mailing list