【问题标题】:HTTP status and response body for a POST request with an external API带有外部 API 的 POST 请求的 HTTP 状态和响应正文
【发布时间】:2020-12-24 14:16:14
【问题描述】:

我有一个管理产品的 Restfull API。我已经有一个创建产品的 POST 请求,我想在正文中添加一个带有条形码的 POST 端点 (postByCode)。 这个新端点将使用另一个 API 通过从中检索信息来创建产品。

第一个问题,如果外部 API 不知道条形码,我应该使用哪种 HTTP 状态(目前我返回一个 404,这对于 POST 来说很奇怪)?

有时,外部 API 知道条形码但没有所需的信息,因此我需要返回部分产品以供用户更新缺失的信息。 第二个问题,在我的 postByCode 中以 307 HTTP 状态返回部分产品是否干净?

我正在考虑用 getByCode 替换我的 postByCode 并使用标准的 POST 端点,但这意味着对每个产品进行 2 次调用,因此使用单个请求进行此操作的简洁方式会很棒。

提前谢谢你:)

【问题讨论】:

    标签: api rest http


    【解决方案1】:

    第一个问题,如果外部 API 不知道条形码,我应该使用哪种 HTTP 状态(目前我返回一个 404,这对于 POST 来说很奇怪)?

    请记住,您已经获得了响应的消息正文,以便向客户端详细描述问题(想想我们将如何在网络上处理这个问题 - 响应将是浏览器可以使用的 HTML 文档渲染,以便人们可以阅读存在问题,这里有一些关于如何解决问题的建议,以及常见问题解答的链接等)。

    响应代码本身是通用元数据 - 主要用于通用用途的东西。通过选择发送错误(4xx 或 5xx),您已经完成了大部分重要工作。

    这里合理的候选人包括

    • 400 错误请求
    • 403禁止
    • 409冲突
    • 422 无法处理的实体

    409 和 422 具有共同的优点,即它们会引起所有人的注意,将请求消息正文作为问题的根源。我想在你的情况下使用 422,但有人想为 409 争论,我当然会听。


    第二个问题,在我的 postByCode 中以 307 HTTP 状态返回部分产品是否干净?

    我根本不喜欢这种情况下的 3xx。我更喜欢 4xx(“我没有这样做,这里是我们需要先做的事情的链接”)或 2xx(“我做了一些,但还有其他步骤需要考虑”)。

    【讨论】:

    • 感谢您的回答。我会按照你的建议去。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2014-01-20
    • 2022-12-12
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多