Правильный код состояния для файла сервера базы данных, который не найден? - PullRequest
0 голосов
/ 11 марта 2020

Я внедряю базу данных на свой веб-сайт и изучаю коды состояния http. Я пытаюсь найти решение любых проблем, которые могут возникнуть в результате запросов, и я подумал о том, чтобы при подключении к базе данных обновить или запросить ее, какой будет правильный код состояния, если файл не существует на стороне сервера (это может были временно сняты, чтобы остановить передачу данных?). Я бы в любом случае реализовал пользовательское сообщение для информирования их, но мне было интересно, какой будет «правильный» код состояния для этого ответа? Я сократил его до 404 (файл не найден) или 503 (служба недоступна) или другой, о которой я не знаю?

PHP код, если он помогает

try {
    if (!file_exists("dbConn.php")) {
        throw new Exception("File Not Found");
    } else {
        require_once("dbConn.php");
        $dbConn = getConnection();
    }
    // other code
} catch (Exception $e) {
    if ($e->getMessage() == "Bad Request") {
        http_response_code(400); // This is for an exception thrown in 'other code' (not displayed)
    } else {
        // http_response_code(404) or http_response_code(503) or other?
    }
}

1 Ответ

1 голос
/ 11 марта 2020

Код статуса 5хх был бы уместен здесь. 503 или 500 кажутся разумными, в зависимости от того, как вы ожидали, так и неожиданно вы считаете эту конкретную ошибку.

404 означает, что пользователь запросил ресурс, который не существует. Разве они в этом случае? Некоторые вспомогательные серверные службы могут не существовать или работать с ошибками, но это не является проблемой пользователя. Коды состояния HTTP относятся к ресурсам HTTP, а не к вашей внутренней инфраструктуре. И пользователь запросил правильный ресурс.

При возврате любого кода состояния 4xx спросите себя:

Может ли пользователь что-то сделать, чтобы изменить свой запрос для устранения проблемы?

Если ответ отрицательный, то это не ошибка клиента, а ошибка сервера. Что ставит проблему на территории 5xx.

Кроме того, это выглядит как плохое использование исключений:

if (!file_exists("dbConn.php")) {
    throw new Exception("File Not Found");
} else {
    //...
}

Это в основном использование исключений для потока управления, для чего уже был if. Вы уже определили в if условии, что искомый файл недоступен. Внутри блока if вы можете составить свой ответ и завершить выполнение скрипта.

Так что, потенциально, что-то вроде:

if (!file_exists("dbConn.php")) {
    http_response_code(500);
    die 'Unable to process the request.';
}
// No need for an "else" here, just continue as normal

Подобные вещи часто называют «охранной оговоркой» , В начале вашей общей работы вы проверяете свои предварительные условия и терпите неудачу при необходимости. Если все пункты охраны пройдут, код можно продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...