Нет ответа про ошибку при запросе по API

Ответить
alexinc
Сообщения: 422
Зарегистрирован: 03 мар 2022, 21:40
Имя: Alex
Откуда: Россия
Контактная информация:

Нет ответа про ошибку при запросе по API

Сообщение alexinc »

Добрый день.
При неправльном запросе по API система либо ничего не выдает, либо выдает ошибку 500, без расшифровки.
После проверки нашлю виновника:

Код: Выделить всё

static function response_error($text, $error_code = '')
    {
        $error_code = strlen($error_code) ? $error_code : 500;
        
        http_response_code($error_code);
        
        $response = array(
            'status' => 'error',
            'error_code' => $error_code,
            'error_message' => $text,
        );

        die(app_json_encode($response));
    }
В данном случае - http_response_code($error_code). После него уже ничего не выводиться.
У меня вопрос - а это намерненно было сделано? или это какая-то недоработка.
После удаление этой строчки в plugins/ext/classes/api/api.php все начало показываться.
alexinc
Сообщения: 422
Зарегистрирован: 03 мар 2022, 21:40
Имя: Alex
Откуда: Россия
Контактная информация:

Re: Нет ответа про ошибку при запросе по API

Сообщение alexinc »

В общем, есть логическая ошибка:

Код: Выделить всё

$error_code = strlen($error_code) ? $error_code : 500;
        
        http_response_code($error_code);
в переменную может прилететь string, а http_response_code параметр string не принимает. Только число или boolean.
Таким образом, когда прилетает текстовая переменная (а она прилетает), вызывается исключение и все встает колом.
Я бы рекомендовал на такой случай использовать 405 ошибку (Method Not Allowed) и забить ее более жестко, с отдачей параметров. Как-то так:

Код: Выделить всё

$error_code = strlen($error_code) ? $error_code : 405;
        
        http_response_code(405);
Тогда и отладчики с ума сходить не будут, и ответ на ошибку получим.
PS. И очень не хватает кодов ошибок. Надписи на английском - это хорошо, но если бы были еще кода - типа 1 - Ошибка пароля, 2 - Ошибка поля и т.д., то легче было бы по api их индефицировать и локализовать во внешних приложениях.
Ответить