Актуальні помилки

← Актуальні помилки

Ashterix

docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api

uk/docs/api/rest-bundle/developers/known_issues/open.md новий файл +21 −0

Актуальні помилки

Відомі помилки й обмеження поточної версії REST Bundle (1.3, ще не випущена; останній реліз — 1.2.0): симптом, причина та обхідний шлях. Виправлені — на сторінці Виправлені помилки.

<include>(.issues/core-validation-400.md)


<include>(.issues/enum-not-cast.md)


<include>(.issues/get-params-as-body.md)


<include>(.issues/single-http-method-in-docs.md)


<include>(.issues/docs-not-cached.md)

uk/docs/api/rest-bundle/developers/known_issues/.issues/core-validation-400.md новий файл +11 −0

Помилки валідації повертають 400, а не 422

Актуальна

Зачеплені версії: 1.0.0 — 1.3 (поточна).

Симптом. Порушення #[RPC\Assertions] чи неправильний тип параметра дають 400 з RestBadRequestException, хоча в таблиці помилок є ConstraintsImposedException → 422.

Причина. Ядро RPC повертає помилку як RPC-помилку з кодом -32602; REST-шар відтворює з неї RpcBadParamException, а не ConstraintsImposedException. 422 отримує лише ConstraintsImposedException, що доходить до REST-шару напряму.

Обхідний шлях. Розраховуйте на 400 з повідомленнями по параметрах у detail-data.

uk/docs/api/rest-bundle/developers/known_issues/.issues/enum-not-cast.md новий файл +11 −0

Параметри-enum не конвертуються з рядка

Актуальна

Зачеплені версії: 1.0.0 — 1.3 (поточна).

Симптом. GET /rest/items?status=active для параметра Status $status (backed enum) повертає 400 з помилкою типу.

Причина. Значення з query, шляху й форми — рядки; RpcFromRest::castString() приводить лише скалярні типи, а ядро RPC не конвертує рядок в enum — однаково для REST і JSON-RPC.

Обхідний шлях. Приймайте string і перетворюйте значення в методі (Status::from($status)).

uk/docs/api/rest-bundle/developers/known_issues/.issues/get-params-as-body.md новий файл +11 −0

Параметри GET-методів документуються як тіло запиту

Актуальна

Зачеплені версії: 1.0.0 — 1.3 (поточна).

Симптом. В OpenAPI операція GET має requestBody з параметрами методу, а запит у колекції Postman — raw JSON-тіло. Генератори клієнтів і Postman надсилають параметри в тілі GET-запиту замість query string.

Причина. OpenApiAdapter::buildParam() і PostmanAdapter::buildService() додають усі параметри, крім змінних шляху, у тіло незалежно від HTTP-методу.

Обхідний шлях. Бандл приймає параметри з query string (див. Параметри запиту); для GET-методів передавайте їх у query вручну.

uk/docs/api/rest-bundle/developers/known_issues/.issues/single-http-method-in-docs.md новий файл +11 −0

Документується лише перший HTTP-метод маршруту

Актуальна

Зачеплені версії: 1.0.0 — 1.3 (поточна).

Симптом. Метод з #[Route(..., methods: ['GET', 'POST'])] приймає обидва HTTP-методи, але в OpenAPI і Postman є лише операція GET.

Причина. OpenApiAdapter::buildService() бере current($route->getMethods()), PostmanAdapter::buildService() — $route->getMethods()[0]. Виявлено за кодом.

Обхідний шлях. Публікуйте метод з одним HTTP-методом.

uk/docs/api/rest-bundle/developers/known_issues/.issues/docs-not-cached.md новий файл +11 −0

Документація REST не кешується

Актуальна

Зачеплені версії: 1.0.0 — 1.3 (поточна).

Симптом. Кожен запит GET /rest, GET /rest/postman заново будує документ; ETag і 304 Not Modified, як у документації RPC, немає.

Причина. RestEntryPointController::openapiAction() / postmanAction() щоразу викликають адаптер; кешування документації JsonRpcBundle працює лише для маршрутів RPC.

Обхідний шлях. Кешуйте відповідь на рівні HTTP-кешу чи вебсервера або не відкривайте документацію в production.