这里也有一个类似的问题: 什么是一个合适的 HTTP状态码返回一个 REST API 服务验证失败?
上面的线程中的答案是: “例如,如果 URI 应该有一个 ISO-8601日期,而你发现它的格式不对或者指向2月31日,那么你将返回一个 HTTP 400。如果希望在实体主体中使用格式良好的 XML,但它无法进行解析,那么情况也是如此。”
但是,如果用户提交了格式正确的数据,会发生什么情况?我的意思是,用户提交了一个纯字母字符串/文本作为用户名和密码(这对我的应用程序是完全有效的)。唯一的问题是密码与用户名不匹配。在这种情况下,400将是不正确的,因为它是完全有效的语法和格式良好的。
一个401将是不正确的(正如建议在这里: 用户名或密码哪个 HTTP状态码不正确?) ,因为用户没有尝试访问任何页面,他只是试图登录和输入数据不匹配。
如果你回头看看我链接到的第一篇文章,第二个答案说422是正确的回复(在我看来是正确的) ,然而,我使用的是 Django Rest Framework,422不是状态码的一部分(一个状态码的列表,属于 DRF 的一部分,可以在这里找到: http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx)
404看起来也不正确,因为数据被成功地接受而不是拒绝。
那么,应该使用的真正正确的反应是什么?