← Валідація вхідних параметрів
docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
uk/docs/api/json-rpc-bundle/add_rpc_service/assertions.md
+30
−1
66
66
67
67
# Валідація вхідних параметрів
68
68
69
−
Замість того, щоб перевіряти чи відповідають вимогам бізнес-логіки параметри, що зайшли до вашого API методу, ви можете застосувати потужний механізм [Symfony Validation](https://symfony.com/doc/current/validation.html), а точніше ви можете вказати вимоги до кожного параметру і RPC API Server сам провалідує вхідні дані, а в разі невідповідності поверне клієнту помилку (докладніше про [обробку помилок](/docs/json-rpc-bundle/error_handling/)).
69
+
Замість того, щоб перевіряти чи відповідають вимогам бізнес-логіки параметри, що зайшли до вашого API методу, ви можете застосувати потужний механізм [Symfony Validation](https://symfony.com/doc/current/validation.html), а точніше ви можете вказати вимоги до кожного параметру і RPC API Server сам провалідує вхідні дані, а в разі невідповідності поверне клієнту помилку (докладніше про [обробку помилок](/docs/api/json-rpc-bundle/error_handling)).
70
70
71
71
Для того, щоб скористатися цією можливістю, ви маєте додати до параметра, який хочете провалідувати, атрибут `#[RPC\Assertions]`, який являє собою контейнер-адаптер, що передає RPC серверу ваші очікування щодо вмісту параметра.
72
72
103
103
}
104
104
}
105
105
```
106
+
107
+
## Помилка валідації
108
+
109
+
Усі порушення по всіх параметрах повертаються однією помилкою `-32602` (`ConstraintsImposedException`). Повідомлення по кожному параметру лежать в `error.data`. Так само (з версії 10.1) повертаються відсутні обов'язкові параметри, параметри неправильного типу і значення, з яких не вдалося створити DTO.
110
+
111
+
```json
112
+
{
113
+
"jsonrpc": "2.0",
114
+
"id": 1,
115
+
"error": {
116
+
"code": -32602,
117
+
"message": "Invalid Data for call method: ExampleApi.sendEmail",
118
+
"data": {
119
+
"email": "This value is not a valid email address.",
120
+
"text": "Required parameter \"text\" not passed"
121
+
}
122
+
}
123
+
}
124
+
```
125
+
126
+
Помилки всередині колекцій DTO прив'язуються до конкретного елемента (`data[param][key]`).
127
+
128
+
## Обмеження в документації
129
+
130
+
Обмеження потрапляють у JSON Schema параметра в [документації](/docs/api/json-rpc-bundle/documentation) (наприклад, `Length` → `minLength`/`maxLength`, `Choice` з enum-callback → `enum`). Якщо в [налаштуваннях](/docs/api/json-rpc-bundle/config) увімкнено `docs.validations.symfony_asserts`, до параметра додається ще й перелік обмежень Symfony (`x-ufo-assertions`).
131
+
132
+
Вбудовані генератори схеми є для `All`, `Choice`, `Collection`, `Date`, `Email`, `EqualTo`, `GreaterThan`, `GreaterThanOrEqual`, `Length`, `NotBlank`, `NotNull`, `Optional`, `Range`, `Regex`, `Uuid`; інші обмеження перевіряються, але в схемі не відображаються.
133
+
134
+
Для власних обмежень можна додати генератор схеми: сервіс з тегом `rpc.constraint`, що реалізує `Ufo\JsonRpcBundle\Validations\JsonSchema\Generate\Interfaces\IConstraintGenerator`.