docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
uk/docs/api/json-rpc-bundle/developers/known_issues/fixed.md
новий файл +57
−0
Виправлені помилки
Помилки попередніх версій і версія, з якої їх виправлено. Якщо ви на зачепленій версії — оновіться або скористайтеся обхідним шляхом. Актуальні помилки — на сторінці Актуальні помилки.
<include>(.issues/post-response-only-http.md)
<include>(.issues/adapter-routes-overwritten.md)
<include>(.issues/autowire-method-arguments.md)
<include>(.issues/info-concat-ignored.md)
<include>(.issues/deprecated-not-in-openrpc.md)
<include>(.issues/xhr-requests-empty.md)
<include>(.issues/response-cache-shared.md)
<include>(.issues/notifications-without-fpm.md)
<include>(.issues/batch-process-cpu-and-token.md)
<include>(.issues/from-integer-becomes-float.md)
<include>(.issues/terminate-listeners-skipped.md)
<include>(.issues/versioned-routes-issues.md)
<include>(.issues/callback-forwarded-all-headers.md)
<include>(.issues/regressions-8-1.md)
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/post-response-only-http.md
новий файл +12
−0
rpc.post_response запускалась не для всіх виконаних запитів
Перевірено за кодом тегів 9.2.1, 10.2.3, 10.4.1 і 10.4.2.
Симптом.
- До 10.4.2: на кожен HTTP-запит чи консольну команду подія генерувалась один раз — для останнього
rpc.pre_response. У процесному batch її отримував лише один запит, а не кожен виконаний. - 10.2.x — 10.4.1: на
kernel.terminateподія запускалась лише тоді, коли carrier —RpcFromHttpцього HTTP-запиту. Для викликів через адаптери (REST тощо) вона не генерувалась, тож не працювали інвалідація#[RPC\CacheRelation]і виконання notifications / callback. Для консольних команд подія запускалась.
Виправлення. Запити збираються в PostResponseQueue, і подія генерується один раз на кожен успішно виконаний запит — для будь-якого carrier-а (IRpcHttpCarrier або виконання через RpcExecutor) і для кожного елемента batch.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/adapter-routes-overwritten.md
новий файл +10
−0
Маршрути адаптера затирали один одного в різних групах API
Зачеплені версії: 10.2.1 — 10.4.0. За описом релізу 10.4.1; за кодом не перевірялось.
Симптом. Два імпорти того самого router.yaml адаптера (наприклад, /mcp і /mcp/internal) давали однакові назви маршрутів, і другий імпорт затирав перший.
Виправлення. Адаптер реєструє свій router.yaml через IApiRouteImport; кожен імпорт отримує назви маршрутів з префіксом групи.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/autowire-method-arguments.md
новий файл +12
−0
#[Autowire] в аргументах RPC-методу не працював
Зачеплені версії: 10.0.1 — 10.3.0. Перевірено за кодом тегів 10.0.6, 10.2.3 і 10.3.1.
Симптом. Сервіс, позначений #[Autowire] в аргументі RPC-методу, не підставлявся.
Причина. RpcServiceMapPass::processParams() пропускав кожен типізований параметр, тому такі аргументи не реєструвалися в локаторі методу.
Обхідний шлях для старих версій. Ін'єкція через конструктор.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/info-concat-ignored.md
новий файл +10
−0
#[RPC\Info(concat: …)] ігнорувався
Зачеплені версії: 10.0.0 — 10.3.0. Перевірено за кодом тегів 9.2.1, 10.0.6, 10.2.3 і 10.3.1.
Симптом. Методи завжди мали роздільник . незалежно від concat.
Важливо при оновленні. Після виправлення concat знову застосовується: якщо його задано, а клієнти викликають методи через ., назви методів зміняться. Оновіть клієнтів або приберіть concat.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/deprecated-not-in-openrpc.md
новий файл +10
−0
Застарілі методи не позначалися в OpenRPC
Зачеплені версії: 9.2.1 — 10.3.0. Перевірено за кодом тегів 9.1.5, 9.2.1, 10.2.3 і 10.3.1.
Симптом. Методи з @deprecated або #[\Deprecated] не отримували "deprecated": true в документації, хоча прапорець збирався в Service::isDeprecated().
Причина. OpenRpcAdapter не передавав прапорець у OpenRpcSpecBuilder::buildMethod().
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/xhr-requests-empty.md
новий файл +10
−0
XHR-запити отримували порожню відповідь
Зачеплені версії: 8.0.0 — 10.3.0. Перевірено за кодом тегів 8.0.5, 9.2.1, 10.2.3 і 10.3.1.
Симптом. POST із заголовком X-Requested-With: XMLHttpRequest (наприклад, jQuery $.ajax) отримував порожню відповідь 200, і метод не викликався.
Виправлення. Порожню відповідь тепер отримує лише CORS preflight OPTIONS.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/response-cache-shared.md
новий файл +10
−0
Кеш відповідей був спільний для різних реалізацій і версій з однаковою назвою
Зачеплені версії: 10.0.0 — 10.2.3. Перевірено за кодом тегів 10.0.6, 10.2.3 і 10.3.1.
Симптом. Однойменні методи різних версій API або різних груп, реалізовані різними класами, могли отримати кешований результат одне одного.
Виправлення. Ключ кешу відповідей містить реалізацію (Class::method) і версію API. Після оновлення наявний кеш один раз не знайдеться і заповниться заново.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/notifications-without-fpm.md
новий файл +14
−0
Notifications не виконувались без PHP-FPM
Зачеплені версії: 10.1.0 — 10.2.3. Перевірено за кодом тегів 10.1.0, 10.2.3 і 10.3.1.
Симптом.
- 10.1.x: поза PHP-FPM (Apache mod_php, вбудований сервер PHP) виклик
fastcgi_finish_request()завершувався помилкою, яку бандл мовчки перехоплював, тожrpc.post_responseне генерувалась і notification не виконувалась узагалі. - 10.2.x: виклик захищено перевіркою
function_exists(), але безignore_user_abort()PHP обривав виконання, якщо клієнт уже закрив з'єднання, і notification мовчки пропадала.
Крім того, виконання друкувало запит і відповідь у stdout через echo.
Виправлення. Notification виконується в будь-якому SAPI, навіть якщо клієнт закрив з'єднання; виконання логується через LoggerInterface::info().
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/batch-process-cpu-and-token.md
новий файл +10
−0
Процесний batch займав ядро CPU і передавав токен у командному рядку
Зачеплені версії: до 10.2.3 включно. Передача токена аргументом перевірена за кодом тегів 10.2.3 і 10.3.1; навантаження CPU — за описом релізу 10.3.
Симптом. Під час процесного batch цикл очікування займав 100% ядра; токен і тіло запиту передавались дочірнім процесам аргументами командного рядка й були видні в списку процесів.
Виправлення. Без активного циклу очікування; токен передається через змінну UFO_RPC_TOKEN, запит — через stdin.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/from-integer-becomes-float.md
новий файл +8
−0
@FROM перетворював ціле число на дробове
Зачеплені версії: до 10.2.3 включно (процесний режим batch). За описом релізу 10.3; за кодом не перевірялось.
Симптом. Цілий результат елемента batch при підстановці в інший елемент через @FROM:<id>(<поле>) ставав дробовим, і метод з параметром int отримував помилку типу.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/terminate-listeners-skipped.md
новий файл +12
−0
Terminate-лістенери застосунку не виконувались після RPC-запитів
Зачеплені версії: до 10.2.3 включно. Перевірено за кодом тегів 9.2.1 — 10.2.3 (зупинка поширення є) і 10.3.1 (немає).
Симптом. Лістенери kernel.terminate / console.terminate застосунку (відправка пошти, flush логів, Sentry тощо) не спрацьовували після RPC-запитів.
Причина. Бандл зупиняв поширення цих подій.
Важливо при оновленні. Перевірте лістенери, які раніше мовчки пропускались, — тепер вони виконуються.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/versioned-routes-issues.md
новий файл +8
−0
Batch і захист документації на версійних адресах
Зачеплені версії: 10.0.0 — 10.0.6, 10.1.0. За описом релізу 10.2; за кодом не перевірялось.
Симптом. Batch-запит на версійну адресу (/rpc/v2) виконував елементи у версії за замовчуванням; версійні адреси документації (/rpc/v2, /rpc/v2/postman) не підпадали під protected_doc.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/callback-forwarded-all-headers.md
новий файл +13
−0
На callback пересилались усі заголовки клієнта, включно з токеном
Зачеплені версії: 9.2.0 — 10.0.5. Перевірено за кодом тегів 9.2.1 (усі заголовки) і 10.0.6 (фільтр); проміжні патч-версії 10.0.x окремо не перевірялись.
Симптом. Для одиночного HTTP-запиту з $rpc.callback сервер копіював усі заголовки вхідного запиту, зокрема RPC-токен (Ufo-RPC-Token) та інші облікові дані, у POST-запит на callback URL. Для callback з елементів процесного batch заголовки не пересилались (дочірній процес не має HTTP-запиту).
Причина. RpcCallbackProcessor::process() брав $httpRequest->headers->all() без фільтра.
Виправлення. Пересилаються лише заголовки трасування: X-Request-Id, X-Correlation-Id, traceparent, tracestate, baggage. Примітки до релізу 9.2 досі описують стару поведінку.
Що зробити, якщо ви були на зачепленій версії. Якщо клієнти передавали $rpc.callback на хости, яким ви не довіряєте, замініть токени, які могли туди потрапити.
uk/docs/api/json-rpc-bundle/developers/known_issues/.issues/regressions-8-1.md
новий файл +10
−0
Регресії у версіях 8.1.1–8.1.5
Зачеплені версії: 8.1.1 — 8.1.5. За описом релізу 8.1; за кодом не перевірялось.
Симптом. Реліз 8.1.1 відкотив частину змін 8.0.4–8.1.0: схеми enum у документації та спеціальні параметри $rpc у RequestCarrier.
Виправлення. Спеціальні параметри — у 8.1.5, схеми enum — у 8.1.6. Не залишайтеся на 8.1.1–8.1.5, використовуйте 8.1.14.