Виправлені помилки
Помилки попередніх версій і версія, з якої їх виправлено. Якщо ви на зачепленій версії — оновіться або скористайтеся обхідним шляхом. Актуальні помилки — на сторінці Актуальні помилки.
REST-виклики не генерували rpc.post_response
Зачеплені версії: 1.0.0 — 1.2.0. За описом релізу 1.3.
Симптом. Після REST-виклику не спрацьовували лістенери rpc.post_response: інвалідація #[RPC\CacheRelation], асинхронні й post-response лістенери застосунку.
Виправлення. Контролер виконує запит через RpcExecutor JsonRpcBundle 10.4.2; успішний виклик отримує rpc.post_response на kernel.terminate.
Значення шляху й query не підходили для типізованих параметрів
Зачеплені версії: 1.0.0 — 1.2.0.
Симптом. GET /rest/catalog/items/42 для item(int $id) повертав 400 з must be of type int, string given.
Виправлення. RpcFromRest приводить рядки зі шляху, query і форми до оголошеного скалярного типу параметра — див. Параметри запиту.
Невідомий метод і помилки обмежень повертали 400
Зачеплені версії: 1.0.0 — 1.2.0.
Симптом. RpcMethodNotFoundExceptionRpc і ConstraintsImposedException поверталися як 400 замість 404 і 422.
Причина. Обидва класи — підкласи RpcBadRequestException, який стояв у RestErrorNormalizer::ERROR_MAPPING раніше за них; крім того, RestValidationException не реалізовував RestErrorInterface і не створювався без масиву обмежень.
Виправлення. Підкласи перевіряються перед батьківськими класами; RestValidationException реалізує RestErrorInterface і бере обмеження з попереднього винятку.
HTTP-код прикладної помилки ігнорувався
Зачеплені версії: 1.0.0 — 1.2.0.
Симптом. throw new CustomApplicationException('Order is closed', 409) з методу повертав 400.
Причина. RestErrorNormalizer створював REST-виняток з кодом 0 для класів з таблиці, а для решти перевіряв код через in_array() по текстах статусів, тож перевірка ніколи не спрацьовувала.
Виправлення. HTTP-код помилки з винятку зберігається — див. Обробка помилок.
RestApplicationException не завантажувався
Зачеплені версії: 1.0.0 — 1.2.0.
Симптом. Фатальна помилка під час використання RestApplicationException або перетворення прикладної помилки.
Причина. Клас успадковував Ufo\RpcError\RpcCustomApplicationException, якого немає в ufo-tech/rpc-exceptions 2.x.
Виправлення. Клас успадковує Ufo\RpcError\CustomApplicationException; аргументи конструктора необов'язкові.
Колекція Postman падала з JsonRpcBundle 10.3+
Зачеплені версії: 1.2.0. За описом релізу 1.3.
Симптом. GET /rest/postman завершувався фатальною помилкою з JsonRpcBundle 10.3 і новіше.
Причина. PostmanAdapter перевизначав властивість $requestStack, яку в 10.3 отримав базовий AbstractPostmanAdapter.
Виправлення. RequestStack передається в конструктор базового адаптера.
Некоректне JSON-тіло ігнорувалось
Зачеплені версії: 1.0.0.
Симптом. Метод виконувався без параметрів з тіла, якщо тіло не було коректним JSON.
Виправлення. Некоректне або скалярне JSON-тіло повертає 400.
Неправильний HTTP-метод повертав 404
Зачеплені версії: 1.0.0.
Симптом. Запит до наявного шляху з HTTP-методом, якого немає в #[Route], повертав 404.
Виправлення. Кожен REST-маршрут отримує запасний маршрут <назва>_method_not_allowed, і такий запит повертає 405.