Wiki source code of 5. Обробка помилок
Last modified by Ashterix on 2024/05/17 19:03
Show last authors
author | version | line-number | content |
---|---|---|---|
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, забезпечуючи стабільність та надійність вашої системи. |