Страница 1 из 1

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

Добавлено: 26 дек 2024, 18:42
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 все начало показываться.

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

Добавлено: 26 дек 2024, 21:16
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 их индефицировать и локализовать во внешних приложениях.