rest - 这个 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 等。即聚合器应该生成这些字段及其值。
您认为哪种方法更好,为什么?
解决方案
204表示 HTTP 中的特定内容;它表示服务器找到了所请求资源的表示,并且该表示的长度为零字节。
因此,真正的问题更像是“我们应该使用零字节长的消息来描述情况吗?”。也许?如果消息模式中的所有字段都是可选的,并且我们试图描述一种表示所有字段都采用其默认值的表示,那么零字节数组可能是传达它的正确方式。
特别是在 HTTP 的上下文中,标头本身的长度已经很重要(与零相比),所以我不认为会有特别令人信服的性能原因将信号压缩到零长度。例如,如果我们通常传递application/json,我希望发送一个空对象或数组比什么都不发送更具成本效益。
推荐阅读
- c++ - 模板与多态
- reactjs - React redux 原子设计——redux 的作用在哪里?
- excel - 获取 charcode 值大于十六进制 `FFFF` 的 Unicode 字符
- c# - 从 GUID c# 生成短 GUID
- java - Java 不满意的链接错误 IBM CICS Explorer
- c# - Serialize a complex class to a simple string
- c# - 从 Android 手机暂停 csharp windows 窗体应用程序
- c# - EF6 以 int 形式浮动
- python - 如何在 Python 中高效地提供 Web、CLI 和 API 接口?
- javascript - 无法从 HTML 标记属性“值”获取值到 onClick 脚本