【发布时间】:2019-01-28 02:35:40
【问题描述】:
我们有一个 PUT 端点,它使用自动递增的 MYSQL id 更新一行。如果我们在请求正文中指定 id,如更改 id 值,端点不会更改 id(这是正确的行为)。但它也返回 200,因为技术上没有验证失败。这应该返回 200 吗?还是应该是 400 或 403?
【问题讨论】:
-
在我看来完全不会改变任何事情的语义。我个人会返回 400。403 主要是关于缺少权限,而不是关于错误的请求。
-
我不清楚你看到了什么以及你想要什么。你发送一个 ID 来改变一些东西,但它没有改变,这是正确的行为吗?
-
它将给定 id 的给定列更改为给定值,但您可以发送一个请求,在该请求中您可以尝试更改 id 列本身,但被拒绝。我就是这么理解的。错误 400 表示客户端出错,403 表示在没有适当权限的情况下尝试做某事,200 表示一切正常。在我看来,未经授权的人越少知道出了什么问题,服务器就越安全。真的取决于情况......它是什么 API,谁使用它,它是如何使用的等等。
-
返回值应该反映
PUT操作的结果。我是否正确理解您的 PUT 操作“成功”?那么 200 是正确的返回码。否则,如果操作在逻辑上“失败”,则可以返回相应的错误。例如,如果未找到id,请参阅在PUT中返回 404:stackoverflow.com/questions/10727699/… -
@FlashThunder - 我们的 QA 团队正在测试他们试图更改 id 列本身的流程。更改没有发生,这很好,因为我们不想更改行的 id。但是 API 返回 200。这是正确的状态码还是应该是 400?