Зміни в документі 5. Обробка помилок
Остання зміна 2024/05/17 19:03 автором Ashterix
Підсумок
-
Властивості сторінки (2 змінено, 0 додано, 0 видалено)
Подробиці
- Властивості сторінки
-
- Назва
-
... ... @@ -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, забезпечуючи стабільність та надійність вашої системи.