如果 REST API 方法失败,我应该返回 200、400 还是 500 HTTP 状态消息?

发布于 2025-01-07 02:50:58 字数 422 浏览 1 评论 0原文

当用户向我的 API 提交无效数据(通常通过 Javascript + JSON)时,我想知道我应该使用哪个 HTTP 响应代码回复与.

我是否应该返回包含错误的 HTTP 200 响应,或者我的服务器是否应该响应 400 或 500 错误,因为请求实际上因某些错误数据而未能通过我的验证?

似乎 400 错误是正确的选择,因为“4xx 类状态代码适用于客户端似乎犯了错误的情况” - wikipedia

然而,需要记住的一件事是,大多数人使用像 jQuery 这样的框架,当 AJAX 请求以除200.

When a user submits invalid data to my API (usually via Javascript + JSON), I am wondering which HTTP response code I should reply with.

Should I return a HTTP 200 response with the errors - or should my server respond with a 400 or 500 error since the request actually failed my validation because of some bad data?

It seems like a 400 error is the way to go since "The 4xx class of status code is intended for cases in which the client seems to have erred" - wikipedia

However, one thing to keep in mind is that most people use a framework like jQuery which requires you to specify an alternate callback when AJAX requests respond with any status code other than a 200.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

从来不烧饼 2025-01-14 02:50:58

400 错误请求 由于语法错误,服务器无法理解该请求。客户端不应在未经修改的情况下重复请求。

在jquery ajax调用中使用statusCode:

<html>
<head>
<title>jquery testing</title>
<script type="text/javascript" src="jquery-1.6.2.min.js"/>"></script>
<script language="javascript">
$(document).ready(
    function(){
        $('#linkClick').click(
            function(){
                    $.ajax({
                        url: 'a.html',
                        data: {},
                        type: 'get',
                        dataType: 'json',
                        statusCode: {
                            404:function() { alert("404"); },
                            200:function() { alert("200"); },
                            201:function() { alert("201"); },
                            202:function() { alert("202"); }
                        },
                        success: function(data) {
                            alert( "Status: " + data);
                        }
                    });
                }); 
        }
        );
</script>
</head>
<body>
<a href="#" id="linkClick">click</a>
</body>
</html>

400 Bad Request The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

use statusCode in jquery ajax calling:

<html>
<head>
<title>jquery testing</title>
<script type="text/javascript" src="jquery-1.6.2.min.js"/>"></script>
<script language="javascript">
$(document).ready(
    function(){
        $('#linkClick').click(
            function(){
                    $.ajax({
                        url: 'a.html',
                        data: {},
                        type: 'get',
                        dataType: 'json',
                        statusCode: {
                            404:function() { alert("404"); },
                            200:function() { alert("200"); },
                            201:function() { alert("201"); },
                            202:function() { alert("202"); }
                        },
                        success: function(data) {
                            alert( "Status: " + data);
                        }
                    });
                }); 
        }
        );
</script>
</head>
<body>
<a href="#" id="linkClick">click</a>
</body>
</html>
装纯掩盖桑 2025-01-14 02:50:58

这一直是一个巨大的困境。事实是,由开发团队选择什么,两者都是有效的,并且如果处理正确,两者都会正常工作。我希望我们能有一个标准的做事方式。但不幸的是,硬币的两面都有争论,要么是完整的 400 状态代码,带有 json 错误解释“业务规则错误”,要么是 200 状态代码,带有 json 指示存在业务错误,即 ok->false (就像 Slack )

仅供参考。-我见过的大多数客户端库都会将状态代码 != 200-299 视为错误。

This has been a huge dilema forever. The truth is that it up to the dev team what to chose, both are valid and both will work fine if handled correctly. I wish we could have a standard way of doing things. But unluckily there are arguments on both sides of the coin, either go full 400 status code with json error explaining the "business rule error" or 200 status code with json indicating there was a business error, i.e. ok->false (Like Slack does with its API.)

Just FYI.- most of the client side libraries I've seen will treat a status code != 200-299 as an error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文