# Laravel validation errors
## Виды ошибок
Существует 3 типа ошибок:
- Ошибка валидации
- Логическая ошибка
- Внутренняя ошибка сервера (500)
## Workflow
1. Клиентское приложение отправляет запрос на сервер
2. Вызывается метод, соответствующий запросу
3. Проверяются переданные данные с помощью правил валидации
4. Если какие-то данные некорректны, возвращается **ошибка валидации**
5. Если невозможно совершить действие для переданных параметров, возвращается **логическая ошибка**
6. Если бекендер накосячил, возвращается **внетренняя ошибка сервера**
**Ошибка валидации** и **логическая ошибка** имеют `HTTP-статус = 200`,
**внутренняя ошибка сервера** имеет `HTTP-статус = 500`
## Ошибка валидации
**Ошибка валидации** свидетельствует о том, что с клиента пришли заведомо невалидные данные.
Структура **ошибки валидации** выглядит следующим образом:
```
{
"ok":false,
"error_code":422,
"description":"Validation failed",
"errors":{
"name":[
"The name field is required."
],
"password":[
"The password must be at least 6 characters.",
"The password confirmation does not match."
]
}
}
```
Ошибка валидации всегда имеет `error_code = 422` и `description = Validation failed`.
Поле `errors` - json, в котором ключами являются названия полей, не прошедших правила валидации,
а значение - массив ошибок, описывающих непршедшие правила валидации.
## Логическая ошибка
**Логические ошибки** возникают, когда при выполнении какого-то метода невозможно выполнить целевое действие
(например, нельзя купить услугу т.к. закончились места).
Структура **логической ошибки**:
```
{
"ok":false,
"error_code":418,
"description":"Wrong verification code"
}
```
Она не имеет поля `error`, только description.
Поле `error_code` пока не несет важной информации.
## Внутренняя ошибка сервера
**Внутренняя ошибка сервера** обычно возникает при неправильно написанном коде (деление на 0)
или попытке некорректной работы с базой данных (отправлены невалидные данные).
## Виды ошибок
- [Все ошибки валидации](https://github.com/caouecs/Laravel-lang/blob/master/src/ru/validation.php)