Обработка ответа сервера REST API

Я работаю с REST API CodeIgniter больше года, и обычно, когда я хочу вернуть какой-либо ответ, я возвращаю 200 для всех видов запросов. Я знаю, что для всех ответов предоставляется код состояния, но на самом деле мне очень интересно, будет ли неправильно использовать 200 для всех ответов? И определить статус данных с помощью true и false.

Вот пример кода, который я всегда использую. Допустим, чтобы проверить, существует ли пользователь или нет.

REST API CodeIgniter

$user = [ 'id' => 1, 'name' => 'John Doe' ];

$this->response([
    'status' => !empty($user) ? true : false,
    'user' => $user
], REST_Controller::HTTP_OK);

React Native

try {
    const res = await axios.get('https://www.example.com/retrieve-user?user_id=3');
    if (res.status == 200){
        if(res.data.status == true){
            // user found
        } else {
            // user not found
        }
    } else {
        alert('Internal server error.')
    }
} catch (err) {
    console.error(err);
}

Основываясь на примере, я фактически полагаюсь на код состояния 200, чтобы определить, есть ли ошибка на сервере (ошибка кода, неверный запрос и т. д.).

Итак, мой вопрос: можно ли придерживаться этого метода?


person Leon    schedule 12.10.2020    source источник
comment
нам этот https://httpstatuses.com/, чтобы, если в будущем вы планируете сделать его как API, а кто-то использует его как API, это будет ясно и понятно   -  person Jatin Mehrotra    schedule 12.10.2020


Ответы (1)


Учитывая ваш API, да обработка кода 200 кажется достаточным, так как ваш API может не возвращать какой-либо другой HttpCode.
Учитывая более крупный API (даже простой), нет.

Ваш API может вернуть 204/404, если пользователь с заданным идентификатором не найден.
Ваш API может вернуть 503, если ваш API находится в стадии развертывания (и недоступен) или на обслуживании, и вы можете повторить попытку через 30 секунд.< br /> Ваш API может отклонить запрос, если данный заголовок отсутствует (Content-Type...) и вернуть 400...

РЕДАКТИРОВАТЬ 1:

if (res.status == 200){
    // user found
} else if (res.status == 204) {
    // user not found
} else {
    alert('An error occured')
}
person IQbrod    schedule 15.10.2020
comment
Я понимаю. Так что кажется, что мне все еще нужно использовать правильный способ, чтобы вернуть ответ. Но на стороне клиента, разве весь остальной код ответа, кроме 200, не будет обрабатываться в моей инструкции else? Я имею в виду, что пока у меня указано else, все должно быть в порядке. Поэтому мы просто предположим, что на стороне сервера произошла ошибка. Ошибка может быть чем угодно, в том числе не найдена, или уже существует, или ошибкой кода. В конце концов, мы хотим показать пользователю только found или not found. - person Leon; 24.10.2020
comment
Ваша спина должна вернуть 200 с пользователем для найденного и 204 для не найденного, но принятого. Ваш фронт должен обрабатывать 200 и 204 как принятый статус и в противном случае идти в блок else - person IQbrod; 24.10.2020