Last modified by Ashterix on 2024/05/17 19:03

Show last authors
1 {{box cssClass="floatinginfobox" title="**Зміст**"}}
2 {{toc/}}
3 {{/box}}
4
5 = Формат помилок в RPC =
6
7 {{info}}
8 Відповідно до специфікації JSON-RPC, коли виклик RPC призводить до помилки, об'єкт відповіді повинен містити елемент "error", який є об'єктом з наступними членами:
9
10 - **code**: Число, яке вказує на тип помилки, що виникла. Це має бути ціле число.
11 - **message**: Рядок, що надає короткий опис помилки. Повідомлення має бути коротким і лаконічним.
12 - **data** (необов'язковий): Додаткова інформація про помилку, яка може бути корисною для налагодження.
13
14 Докладніше про формат помилок можна прочитати у специфікації JSON-RPC: [[JSON-RPC 2.0 Specification>>https://www.jsonrpc.org/specification#error_object]].
15 {{/info}}
16
17 = Обробка помилок =
18
19 У JsonRpcBundle реалізовано стандартний механізм обробки помилок для RPC запитів, який базується на окремому пакеті `ufo-tech/rpc-exceptions`. Цей пакет надає можливість детально обробляти помилки, що виникають під час виконання RPC запитів, і повертати стандартизовані коди та повідомлення про помилки.
20
21 == Коди помилок та їх інтерпретація ==
22
23 Пакет `ufo-tech/rpc-exceptions` надає перелік стандартних кодів помилок та відповідних класів виключень:
24
25 |= Код                    |= Тип помилки          |= Опис                                              |=
26 | -32700                 | Parse error          | Сервер отримав недійсний JSON                      |
27 | -32600                 | Invalid Request      | Наданий JSON не є дійсним об'єктом запиту          |
28 | -32601                 | Method not found     | Метод не існує або недоступний                     |
29 | -32602                 | Invalid params       | Недійсні параметри методу                          |
30 | -32603                 | Internal error       | Внутрішня помилка JSON-RPC                         |
31 | -32500                 | Application error    | Помилка виконання процедури                        |
32 | -32400                 | System error         | Логічна помилка в додатку                          |
33 | -32401                 | Security error       | Токен не знайдено                                  |
34 | -32403                 | Security error       | Недійсний токен                                    |
35 | -32300                 | Async error          | Помилка передачі асинхронних даних                 |
36 | -32301                 | Batch error          | Помилка batch-запиту                               |
37 | -32000                 | Server error         | Зарезервовано для серверних помилок, визначених реалізацією |
38 | від -32001 до -32099   | Користувацька помилка| ---                                               --|
39
40 == Використання виключень у вашому коді ==
41
42 {{code language="php" layout="LINENUMBERS" title="=== Отримання об'єкта виключення з коду ==="}}
43 <?php
44 use Ufo\RpcError\AbstractRpcErrorException;
45
46 $code = -32700;
47 $message = 'Some custom error message from rpc server'; // опціонально
48 $rpcException = AbstractRpcErrorException::fromCode($code);
49 // повертає екземпляр RpcJsonParseException::class
50 {{/code}}
51
52 {{code language="php" layout="LINENUMBERS" title="=== Отримання об'єкта виключення з масиву ==="}}
53 <?php
54 use Ufo\RpcError\AbstractRpcErrorException;
55
56 $data = [
57 'code' => -32600,
58 'message' => 'Some custom error message from rpc server',
59 ];
60 $rpcException = RpcBadRequestException::fromArray($data);
61 // повертає екземпляр RpcBadRequestException::class
62 {{/code}}
63
64 {{code language="php" layout="LINENUMBERS" title="=== Отримання об'єкта виключення з JSON ==="}}
65 <?php
66 use Ufo\RpcError\AbstractRpcErrorException;
67
68 $data = "{\"code\":-32500,\"message\":\"Some custom error message from rpc server\"}";
69 $rpcException = AbstractRpcErrorException::fromJson($data);
70 // повертає екземпляр RpcRuntimeException::class
71 {{/code}}
72
73 == Поради для розробників ==
74
75 Якщо ви, як розробник, хочете повертати специфічну помилку, яка буде інтерпретована RPC сервером, вам слід використовувати один з інтерфейсів, наданих пакетом `ufo-tech/rpc-exceptions`, або наслідувати типовий ексепшен та притримуватися нумерації помилок.
76
77 Однак, якщо специфічна обробка не потрібна, сервер здатний обробити будь-яку помилку або виключення, що відбуваються на рівні виконання методу API, забезпечуючи стабільність та надійність вашої системи.