Ruby on rails 葡萄错误处理策略?
我正在使用Grape和Rails创建RESTAPI。我有基本的架构,我正在寻找地方“清理”东西。其中一个地方是错误处理/处理 我目前正在为整个API挽救root.rb(GRAPE::API基类)文件中的错误。我格式化它们,然后通过rack_响应将错误发送回。所有的东西都可以找到,但是root.rb文件变得有点臃肿,所有的错误都被解救了,其中一些错误需要进行特殊的解析。我想知道是否有人已经开发了一个很好的错误处理策略,这样就可以将它移入自己的模块中,并使root.rb(GRAPE::API基类)相当精简 我真的很想创建一个错误处理模块,并为每种类型的错误定义方法,例如Ruby on rails 葡萄错误处理策略?,ruby-on-rails,ruby,rest,grape,grape-entity,Ruby On Rails,Ruby,Rest,Grape,Grape Entity,我正在使用Grape和Rails创建RESTAPI。我有基本的架构,我正在寻找地方“清理”东西。其中一个地方是错误处理/处理 我目前正在为整个API挽救root.rb(GRAPE::API基类)文件中的错误。我格式化它们,然后通过rack_响应将错误发送回。所有的东西都可以找到,但是root.rb文件变得有点臃肿,所有的错误都被解救了,其中一些错误需要进行特殊的解析。我想知道是否有人已经开发了一个很好的错误处理策略,这样就可以将它移入自己的模块中,并使root.rb(GRAPE::API基类)相
module API
module ErrorHandler
def record_not_found
rack_response API::Utils::ApiErrors.new({type: e.class.name, message: 'Record not found'}).to_json, 404
end
end
end
然后在root.rb文件中执行如下操作
module API
class Root < Grape::API
prefix 'api'
format :json
helpers API::ErrorHandler
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found # Use the helper method as the handler for this error
end
end
模块API
类根
有人做过这样的事吗?我一直在尝试上述各种策略,但我似乎什么都没用 我想到了以下解决方案/策略 我将所有错误救援移到它自己的模块中,如下所示
module API
module Errors
extend ActiveSupport::Concern
included do
rescue_from :all do |e|
rack_response API::Utils::ApiErrors.new({type: e.class.name, message: e.message}).to_json, 500
end
.
.
.
end
end
然后,我只需将错误包含在我的基本GRAPE::API类中
module API
class Root < Grape::API
include API::Errors
prefix 'api'
format :json
helpers API::Utils::Helpers::IndexHelpers
helpers API::Utils::Helpers::WardenHelpers
helpers API::Utils::Helpers::RecordHelpers
.
.
.
end
end
模块API
类根
在进行了大量实验和其他尝试之后,我认为这是一个很好的解决方案,我的基础GRAPE::API类仍然非常精简。我仍然对人们可能采用的任何其他方法持开放态度 看一看,这似乎是一个功能要求,但似乎人们现在已经找到了解决办法。这与我所寻找的不太一样,但肯定有一些想法可以在链接中考虑。谢谢。不,我确实有一个“全面覆盖”500,但我可以避免其他错误,将状态代码设置为适合该错误的值。例如,我们解救自定义的不可处理错误,并将其状态代码设置为422。