docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
uk/docs/api/rest-bundle/developers/known_issues/fixed.md
новий файл +33
−0
1
+
# Виправлені помилки
2
+
3
+
Помилки попередніх версій і версія, з якої їх виправлено. Якщо ви на зачепленій версії — оновіться або скористайтеся обхідним шляхом. Актуальні помилки — на сторінці [Актуальні помилки](/docs/api/rest-bundle/developers/known_issues/open).
4
+
5
+
<include>(.issues/post-response-not-fired.md)
6
+
7
+
---
8
+
9
+
<include>(.issues/path-query-not-cast.md)
10
+
11
+
---
12
+
13
+
<include>(.issues/error-mapping-order.md)
14
+
15
+
---
16
+
17
+
<include>(.issues/application-error-status.md)
18
+
19
+
---
20
+
21
+
<include>(.issues/rest-application-exception.md)
22
+
23
+
---
24
+
25
+
<include>(.issues/postman-adapter-request-stack.md)
26
+
27
+
---
28
+
29
+
<include>(.issues/malformed-json-ignored.md)
30
+
31
+
---
32
+
33
+
<include>(.issues/wrong-method-404.md)
uk/docs/api/rest-bundle/developers/known_issues/.issues/post-response-not-fired.md
новий файл +10
−0
1
+
### REST-виклики не генерували `rpc.post_response`
2
+
3
+
:::success subtitle="Виправлено в 1.3 (ще не випущена)"
4
+
Зачеплені версії: 1.0.0 — 1.2.0.
5
+
За описом релізу 1.3.
6
+
:::
7
+
8
+
**Симптом.** Після REST-виклику не спрацьовували лістенери `rpc.post_response`: інвалідація `#[RPC\CacheRelation]`, асинхронні й post-response лістенери застосунку.
9
+
10
+
**Виправлення.** Контролер виконує запит через `RpcExecutor` JsonRpcBundle 10.4.2; успішний виклик отримує `rpc.post_response` на `kernel.terminate`.
uk/docs/api/rest-bundle/developers/known_issues/.issues/path-query-not-cast.md
новий файл +9
−0
1
+
### Значення шляху й query не підходили для типізованих параметрів
2
+
3
+
:::success subtitle="Виправлено в 1.3 (ще не випущена)"
4
+
Зачеплені версії: 1.0.0 — 1.2.0.
5
+
:::
6
+
7
+
**Симптом.** `GET /rest/catalog/items/42` для `item(int $id)` повертав `400` з `must be of type int, string given`.
8
+
9
+
**Виправлення.** `RpcFromRest` приводить рядки зі шляху, query і форми до оголошеного скалярного типу параметра — див. [Параметри запиту](/docs/api/rest-bundle/requests).
uk/docs/api/rest-bundle/developers/known_issues/.issues/error-mapping-order.md
новий файл +11
−0
1
+
### Невідомий метод і помилки обмежень повертали 400
2
+
3
+
:::success subtitle="Виправлено в 1.3 (ще не випущена)"
4
+
Зачеплені версії: 1.0.0 — 1.2.0.
5
+
:::
6
+
7
+
**Симптом.** `RpcMethodNotFoundExceptionRpc` і `ConstraintsImposedException` поверталися як `400` замість `404` і `422`.
8
+
9
+
**Причина.** Обидва класи — підкласи `RpcBadRequestException`, який стояв у `RestErrorNormalizer::ERROR_MAPPING` раніше за них; крім того, `RestValidationException` не реалізовував `RestErrorInterface` і не створювався без масиву обмежень.
10
+
11
+
**Виправлення.** Підкласи перевіряються перед батьківськими класами; `RestValidationException` реалізує `RestErrorInterface` і бере обмеження з попереднього винятку.
uk/docs/api/rest-bundle/developers/known_issues/.issues/application-error-status.md
новий файл +11
−0
1
+
### HTTP-код прикладної помилки ігнорувався
2
+
3
+
:::success subtitle="Виправлено в 1.3 (ще не випущена)"
4
+
Зачеплені версії: 1.0.0 — 1.2.0.
5
+
:::
6
+
7
+
**Симптом.** `throw new CustomApplicationException('Order is closed', 409)` з методу повертав `400`.
8
+
9
+
**Причина.** `RestErrorNormalizer` створював REST-виняток з кодом `0` для класів з таблиці, а для решти перевіряв код через `in_array()` по текстах статусів, тож перевірка ніколи не спрацьовувала.
10
+
11
+
**Виправлення.** HTTP-код помилки з винятку зберігається — див. [Обробка помилок](/docs/api/rest-bundle/error_handling).
uk/docs/api/rest-bundle/developers/known_issues/.issues/rest-application-exception.md
новий файл +11
−0
1
+
### `RestApplicationException` не завантажувався
2
+
3
+
:::success subtitle="Виправлено в 1.3 (ще не випущена)"
4
+
Зачеплені версії: 1.0.0 — 1.2.0.
5
+
:::
6
+
7
+
**Симптом.** Фатальна помилка під час використання `RestApplicationException` або перетворення прикладної помилки.
8
+
9
+
**Причина.** Клас успадковував `Ufo\RpcError\RpcCustomApplicationException`, якого немає в `ufo-tech/rpc-exceptions` 2.x.
10
+
11
+
**Виправлення.** Клас успадковує `Ufo\RpcError\CustomApplicationException`; аргументи конструктора необов'язкові.
uk/docs/api/rest-bundle/developers/known_issues/.issues/postman-adapter-request-stack.md
новий файл +12
−0
1
+
### Колекція Postman падала з JsonRpcBundle 10.3+
2
+
3
+
:::success subtitle="Виправлено в 1.3 (ще не випущена)"
4
+
Зачеплені версії: 1.2.0.
5
+
За описом релізу 1.3.
6
+
:::
7
+
8
+
**Симптом.** `GET /rest/postman` завершувався фатальною помилкою з JsonRpcBundle 10.3 і новіше.
9
+
10
+
**Причина.** `PostmanAdapter` перевизначав властивість `$requestStack`, яку в 10.3 отримав базовий `AbstractPostmanAdapter`.
11
+
12
+
**Виправлення.** `RequestStack` передається в конструктор базового адаптера.
uk/docs/api/rest-bundle/developers/known_issues/.issues/malformed-json-ignored.md
новий файл +9
−0
1
+
### Некоректне JSON-тіло ігнорувалось
2
+
3
+
:::success subtitle="Виправлено в 1.1.0"
4
+
Зачеплені версії: 1.0.0.
5
+
:::
6
+
7
+
**Симптом.** Метод виконувався без параметрів з тіла, якщо тіло не було коректним JSON.
8
+
9
+
**Виправлення.** Некоректне або скалярне JSON-тіло повертає `400`.
uk/docs/api/rest-bundle/developers/known_issues/.issues/wrong-method-404.md
новий файл +9
−0
1
+
### Неправильний HTTP-метод повертав 404
2
+
3
+
:::success subtitle="Виправлено в 1.1.0"
4
+
Зачеплені версії: 1.0.0.
5
+
:::
6
+
7
+
**Симптом.** Запит до наявного шляху з HTTP-методом, якого немає в `#[Route]`, повертав `404`.
8
+
9
+
**Виправлення.** Кожен REST-маршрут отримує запасний маршрут `<назва>_method_not_allowed`, і такий запит повертає `405`.