处理REST API服务器响应

问题描述

我使用REST API CodeIgniter已有一年多了,通常,当我想返回任何响应时,对于所有类型的请求,我都会返回200。我知道为所有响应提供了状态代码,但实际上我很想知道,如果我对所有响应都使用200错误的吗?并使用truefalse确定数据状态。

这是我经常使用的示例代码。假设要检查用户是否存在。

CodeIgniter REST API

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

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

反应原生

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来确定服务器中是否存在错误代码错误,无效请求等)。

所以我的问题是,坚持使用这种方法可以吗?

解决方法

鉴于您的API,处理代码200似乎已足够,因为您的API可能不会返回任何其他HttpCode。
如果使用更大的API(甚至是简单的API),

如果找不到具有给定ID的用户,则您的API可能会返回204 / 404
如果您的API正在部署(不可用)或正在维护中,则API可能会返回503,并且您可能会在30秒后重试。
如果缺少给定的标头(内容类型...),您的API可能会拒绝请求,并返回400 ...

编辑1:

if (res.status == 200){
    // user found
} else if (res.status == 204) {
    // user not found
} else {
    alert('An error occured')
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...