在error_codes.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.'
在配置/初始化/ api_errors.rb載荷YAML文件轉換成一個常數。
API_ERRORS = YAML.load_file(Rails.root.join('doc','error-codes.yml'))['api']
對app/controllers/concerns/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中保持一致。
你可以有一些控制器代碼。它是API和你的應用程序請求相同的代碼嗎?因爲您向我們展示了您對模型的驗證,但我認爲您應該在控制器上處理您的問題。 –