更正无效POST请求的响应代码

时间:2015-02-18 09:01:28

标签: http response

我刚注意到在我的应用程序中可能不正确的东西。在许多方面,我发布了需要某些输入参数的表单,以便继续插入数据。例如,为了将用户添加到您的联系人列表,首先必须存在用户,并且我非常简单地执行此操作

$db = \Database::connection();
$user = new \Models\User();
$user->getById($data['id'], $db);

if ($user->id) {
    if (\Models\User::auth()->addContact($user, $db)) {
        return \Response::json(['text' => 'Contact added']);
    } else {
        throw new \Exception('User not found', 404);
    }
}

忽略所有其他错误的可能性,只关注user not found,我只是注意到我正在返回404代码,我对此表示怀疑。当我编写这段代码时,我肯定会被消息中的not found部分激怒,并自动认为它是404错误。然而,现在当我考虑它时,404错误实际上是#34;资源未找到",当我没有要求资源时如何找不到资源,这是我的逻辑。

将404错误返回给POST请求是否正确,或者我应该切换到400?

1 个答案:

答案 0 :(得分:1)

正在更新的资源是用户联系人列表 - 类似User / [userid] / ContactList?正在正确识别此资源,但添加到联系人列表的用户无效。

http rfc 404中,“服务器未找到与Request-URI匹配的任何内容......” 我发现在找到要更新的资源的基础上得到这个错误是令人惊讶的行为。如果您要返回404,那么它应该包含一个消息正文,指出未找到哪个资源。

400意味着“由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求”。我认为语法是正确的,所以500(内部服务器错误)加上响应体中的解释更合适。