Я пишу REST API, и я наткнулся на проблему. Каков наилучший способ вернуть ошибки проверки.
До сих пор я возвращал сообщения об ошибках, сбрасываемые в общий код ошибки (например, скажем, плохой запрос)
{
"status": 400,
"error": {
"code": 1, // General bad request code
"message": [
"The Key \"a\" is missing",
"The Key \"b\" is missing",
"The Key \"c\" is missing",
"Incorrect Format for field \"y\""
]
}
)
Я исследовал немного больше о том, как должен выглядеть хороший API-ответ, и я подумал о следующих вариантах:
-
Остановитесь при первой обнаруженной ошибке и верните ответ с конкретным кодом ошибки
{ "status": 400, //Same as the HTTP header returned "error" { "code": 1, // Specific field validation error code "message": "Field \"x\" is missing from the array structure", "developer_message": "The request structure must contain the following fields {a,b,c{x,y,z}}", "more_info" => "www.api.com/help/errors/1" } )
-
Проанализируйте все данные запроса и верните несколько ошибок проверки поля.
{ "status": 400, "error": { "code": 1 //General bad Request code "message": "Bad Request", "developer_message": "Field validation errors." "more_info": "www.api.com/help/errors/1", "error_details": { 0: { "code": 2 // Specific field validation error code "message": "Field \"x\" is missing from the array structure", "developer_message": "The request structure must contain the following fields {a,b,c{x,y,z}}", "more_info": "www.api.com/help/errors/2" }, 1: { "code": 3 // Specific field validation error code "message": "Incorrect Format for field \"y\"", "developer_message": "The field \"y\" must be in the form of \"Y-m-d\"", "more_info": "www.api.com/help/errors/3" } } } }
По моему мнению, вариант 2 был бы правильным (он дает более полезную информацию для разработчиков/конечных пользователей, а загрузка сервера может быть ниже (меньше запросов/нет необходимости проверять достоверные данные/нет необходимости вычислять подпись и аутентифицировать пользователя)), но я блуждаю, какие лучшие практики, и если есть другой способ лечения таких проблем.
Также я думаю, что вариант 1 по-прежнему действителен, если я получаю одну фатальную ошибку в потоке script. (не ошибки проверки)
Обратите внимание, что код - это просто простой массив, поэтому его легче отслеживать. Формат ответа будет JSON или XML.