← Актуальні помилки Client SDK
docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
uk/docs/api/sdk/client/known_issues/open.md
new file +49
−0
Актуальні помилки Client SDK
Відомі помилки й нестиковки поточної версії ufo-tech/json-rpc-client-sdk (5.0.2). Виправлені — на сторінці Виправлені помилки.
<include>(.issues/errors-wrapped-in-sdk-exception.md)
<include>(.issues/async-params-not-reset.md)
<include>(.issues/sync-reset-skipped-on-error.md)
<include>(.issues/async-ping-fatal.md)
<include>(.issues/async-no-api-group.md)
<include>(.issues/response-schema-cached-by-method.md)
<include>(.issues/request-response-stack.md)
<include>(.issues/enum-try-from-value.md)
<include>(.issues/url-in-attr-ignored.md)
<include>(.issues/make-script-limits.md)
<include>(.issues/return-docblock-default.md)
<include>(.issues/readme-outdated.md)
uk/docs/api/sdk/client/known_issues/.issues/errors-wrapped-in-sdk-exception.md
new file +11
−0
Типізовані помилки сервера приходять лише всередині SdkException
Зачеплені версії: 5.0.2 (поточна). Нестиковка з очікуваннями й README; перевірено за кодом тегу 5.0.2.
Симптом. catch (RpcDataNotFoundException $e) навколо синхронного виклику ніколи не спрацьовує.
Причина. AbstractProcedure::requestApi() загортає будь-який виняток у Ufo\RpcSdk\Exceptions\SdkException; виняток rpc-exceptions доступний через getPrevious(), код JSON-RPC — через getCode(). Помилки валідації параметрів, навпаки, вилітають без обгортки.
Обхідний шлях. Ловіть SdkException і перевіряйте getPrevious() — див. Використання.
uk/docs/api/sdk/client/known_issues/.issues/async-params-not-reset.md
new file +9
−0
Асинхронні виклики не скидають спеціальні параметри і не змінюють id
Зачеплені версії: 4.2.0 — 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2; у 4.2.x скидання додано лише для синхронних класів.
Симптом. Після callbackTo(), asyncTimeout(), rayId() чи withoutCache() на асинхронному об'єкті параметр діє на всі наступні виклики цього об'єкта; усі виклики мають однаковий id.
Обхідний шлях. Викликайте resetConfig() і setId() перед кожним викликом або створюйте новий об'єкт для кожного запиту з особливими параметрами.
uk/docs/api/sdk/client/known_issues/.issues/sync-reset-skipped-on-error.md
new file +11
−0
Після помилки синхронного виклику параметри й id не скидаються
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом. Якщо виклик завершився помилкою, спеціальні параметри (withoutCache(), rayId() тощо) і id переходять на наступний виклик того самого об'єкта.
Причина. Скидання параметрів і новий id виконуються лише на шляху успіху (AbstractProcedure::requestApi()).
Обхідний шлях. Після перехопленої помилки викликайте resetConfig() і setId().
uk/docs/api/sdk/client/known_issues/.issues/async-ping-fatal.md
new file +11
−0
ping() на асинхронному класі завершується фатальною помилкою
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом. $asyncSdk->ping() — Error: Call to a member function getResult() on true.
Причина. ping() оголошено в спільному AbstractBaseProcedure як $this->requestApi()->getResult(), а в асинхронних класах requestApi() повертає true.
Обхідний шлях. Перевіряйте доступність сервера синхронним класом.
uk/docs/api/sdk/client/known_issues/.issues/async-no-api-group.md
new file +11
−0
Асинхронні виклики не передають групу API
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом. Асинхронний виклик методу, що належить не до групи general, сервер відхиляє як Method not found.
Причина. AbstractAsyncProcedure створює RpcAsyncRequest без apiGroup; сервер у такому разі використовує general.
Обхідний шлях. Для асинхронних викликів використовуйте методи групи general.
uk/docs/api/sdk/client/known_issues/.issues/response-schema-cached-by-method.md
new file +11
−0
Схема результату кешується лише за назвою методу
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом. Якщо в одному процесі є два SDK-класи (різні постачальники чи версії API) з однаковою назвою RPC-методу, наприклад User.get, відповідь другого перетворюється за схемою, простором імен і обробниками першого — результат отримує DTO не того класу або падає.
Причина. SdkResponseCreator::$instances ключується лише назвою методу.
Обхідний шлях. Не використовуйте в одному процесі кількох постачальників з однаковими назвами методів або давайте методам різні назви на сервері.
uk/docs/api/sdk/client/known_issues/.issues/request-response-stack.md
new file +11
−0
RequestResponseStack::getLast*() не працюють
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом. getLastStack(), getLastRequest(), getLastResponse() після виклику дають помилку невизначеного індексу й TypeError. Асинхронні виклики перезаписують один і той самий запис стека.
Причина. addResponse() збільшує лічильник, а getLast*() читають запис за новим, ще порожнім індексом. Асинхронні класи не викликають addResponse().
Обхідний шлях. Використовуйте RequestResponseStack::getAll() і беріть останній елемент.
uk/docs/api/sdk/client/known_issues/.issues/enum-try-from-value.md
new file +11
−0
tryFromValue() згенерованих enum кидає TypeError
Зачеплені версії: 5.0.2 (поточна). Перевірено за шаблоном templates/enum.php.twig тегу 5.0.2.
Симптом. OrderStatus::tryFromValue('unknown') замість null — TypeError.
Причина. Метод оголошено як : self, а він повертає self::tryFrom(), тобто ?self.
Обхідний шлях. Використовуйте вбудований OrderStatus::tryFrom().
uk/docs/api/sdk/client/known_issues/.issues/url-in-attr-ignored.md
new file +11
−0
urlInAttr / generate_url_in_attr не впливає на генерацію
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом. Атрибут #[ApiUrl] з адресою сервера ніколи не з'являється в згенерованих класах; адреса завжди береться з sdk_config.yaml(.dist).
Причина. SdkProcedureMaker передає в шаблон apiUrlInAttr, але шаблони його не використовують.
Обхідний шлях. Задавайте адреси через sdk_config.yaml.
uk/docs/api/sdk/client/known_issues/.issues/make-script-limits.md
new file +14
−0
bin/make.php не дозволяє задати простір імен і заголовки
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом.
- Простір імен жорстко заданий як
Ufo\RpcSdk\Client, а його ж пакет зіставляє у своємуcomposer.jsonз власним каталогомsdk/, тож у встановленому як залежність пакеті згенеровані файли можуть потрапити уvendor/. - Документацію запитує без заголовків — захищену
protected_docдокументацію не отримати. - Без аргументу читає
bin/schema.json, якого немає в пакеті. Maker::make()без callback завершується помилкою (callback викликається без перевірки наnull).
Обхідний шлях. Генеруйте через SDK Bundle або з коду з власним ConfigsHolder і HttpReader із заголовками — див. Генерація.
uk/docs/api/sdk/client/known_issues/.issues/return-docblock-default.md
new file +11
−0
Метод без @return дає попередження
Зачеплені версії: 5.0.2 (поточна). Перевірено за кодом тегу 5.0.2.
Симптом. Для методу згенерованого класу без тегу @return (наприклад, після ручного редагування) — PHP warning про невизначений індекс.
Причина. (string)$tags[0] ?? 'mixed' у SdkResponseCreator: приведення типу виконується до ??, тож значення за замовчуванням не застосовується.
Обхідний шлях. Не прибирайте @return із згенерованих класів.
uk/docs/api/sdk/client/known_issues/.issues/readme-outdated.md
new file +11
−0
README пакета застарів
Зачеплені версії: 5.0.2 (поточна). Нестиковка документації, на роботу не впливає.
- Методи
->timeout()і->callback()насправді називаютьсяasyncTimeout()іcallbackTo(). - Маска «лише синхронні» в таблиці —
#Command.run; правильно&Command.run. - Приклад використання з
UserProcedure/PingProcedure— з версій 2.x–3.x; зараз класи називаються<Назва>SDK, результати — DTO. - Вказано
ufo-tech/rpc-objects^3.7, уcomposer.json— ^3.8; Symfony 8 іrpc-exceptions^2 не згадано. - Посилання на документацію веде на стару вікі
docs.ufo-tech.space.