首页 > 解决方案 > 这个 GET 调用应该返回 204 还是 200 和 body?

问题描述

假设我们有一个 rest api,它从其他服务聚合有关 Person 的数据。聚合器服务路线之一是GET /person/(person id)/driverinfo告诉我们此人是否是有执照的司机、驾照 ID、驾照到期日和交通违规次数。聚合器可以从一项或多项其他服务中获取这些数据。网页将使用此 api 来显示有关人员的“驱动程序信息”。它还将通过自动化进行测试。

目前,该 api 对没有驾驶执照的人给出 204 无内容响应。这是因为其中一个底层 api 为该场景提供了 204。因此,决定聚合器也应该这样做。

但是,我认为这不是一个好的回应。相反,我们应该返回 200 并为字段提供适当的值。例如,当底层 api 给出 204 时,license=false、licenseId = NA 等。即聚合器应该生成这些字段及其值。

您认为哪种方法更好,为什么?

标签: restapihttp-status-codes

解决方案


204表示 HTTP 中的特定内容;它表示服务器找到了所请求资源的表示,并且该表示的长度为零字节。

因此,真正的问题更像是“我们应该使用零字节长的消息来描述情况吗?”。也许?如果消息模式中的所有字段都是可选的,并且我们试图描述一种表示所有字段都采用其默认值的表示,那么零字节数组可能是传达它的正确方式。

特别是在 HTTP 的上下文中,标头本身的长度已经很重要(与零相比),所以我不认为会有特别令人信服的性能原因将信号压缩到零长度。例如,如果我们通常传递application/json,我希望发送一个空对象或数组比什么都不发送更具成本效益。


推荐阅读