Валідація вхідних параметрів

← Валідація вхідних параметрів

Ashterix

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`.