On 错误代码.yml定义您的标准 API 错误,包括status_code
, title
, details
和一个内部code
然后,您可以在 API 文档中提供有关错误的更多信息。
这是一个基本示例:
api:
invalid_resource:
code: '1'
status: '400'
title: 'Bad Request'
not_found:
code: '2'
status: '404'
title: 'Not Found'
details: 'Resource not found.'
On 配置/初始化器/api_errors.rb将该 YAML 文件加载到常量中。
API_ERRORS = YAML.load_file(Rails.root.join('doc','error-codes.yml'))['api']
On 应用程序/控制器/关注点/error_handling.rb定义一个可重用的方法来以 JSON 格式呈现 API 错误:
module ErrorHandling
def respond_with_error(error, invalid_resource = nil)
error = API_ERRORS[error]
error['details'] = invalid_resource.errors.full_messages if invalid_resource
render json: error, status: error['status']
end
end
在您的 API 基础控制器上包含关注点,以便它在继承它的所有控制器上可用:
include ErrorHandling
然后,您将能够在任何这些控制器上使用您的方法:
respond_with_error('not_found') # For standard API errors
respond_with_error('invalid_resource', @user) # For invalid resources
例如,在您的用户控制器上,您可能有以下内容:
def create
if @user.save(your_api_params)
# Do whatever your API needs to do
else
respond_with_error('invalid_resource', @user)
end
end
您的 API 将输出的错误将如下所示:
# For invalid resources
{
"code": "1",
"status": "400",
"title": "Bad Request",
"details": [
"Email format is incorrect"
]
}
# For standard API errors
{
"code": "2",
"status": "404",
"title": "Not Found",
"details": "Route not found."
}
随着 API 的增长,您将能够轻松地在 YAML 文件中添加新的错误代码,并通过此方法使用它们,从而避免重复并使错误代码在整个 API 中保持一致。