Зміни в документі 5. Обробка помилок

Остання зміна 2024/05/17 19:03 автором Ashterix

Від версії 1.1
редаговано Ashterix
дата 2024/05/10 13:00
Змінити коментар: Немає коментарів для цієї версії
До версії 2.3
редаговано Ashterix
дата 2024/05/17 19:03
Змінити коментар: Немає коментарів для цієї версії

Підсумок

Подробиці

Властивості сторінки
Назва
... ... @@ -1,1 +1,1 @@
1 -4. Обробка помилок
1 +5. Обробка помилок
Вміст
... ... @@ -1,0 +1,77 @@
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, забезпечуючи стабільність та надійність вашої системи.