假设我们有一个 API,其路由/foo/<id>
表示对象的实例,如下所示:
class Foo:
bar: Optional[Bar]
name: str
...
class Bar:
...
(Python 中的示例只是因为它方便,这是关于 HTTP 层而不是应用程序逻辑。)
我们想在 下暴露完整的序列化Foo
实例(可能有许多其他属性)/foo/<id>
,但是为了效率,我们也想暴露/foo/<id>/bar
给我们给定的.bar
属性Foo
。
在这里时404
用作状态响应对我来说感觉很奇怪,因为如果您请求一些任意不正确的路线(例如,),您会得到相同的状态代码;如果我们要在我们的客户端层自动处理 404 状态,那么可能会用“我们忘记登录”或“客户端 URL 路由错误”之类的解释来误解这一点。bar
None
/random/gibberish
但是,200
使用响应体null
(如果我们使用 JSON 进行序列化)也感觉很奇怪,因为在给定端点处实体的存在或不存在通常是通过状态而不是正文中的内联来传达的。204
在这里说一个空的响应体是否正确?是404
正确的方法,如果是这样,服务器传达细微差别的正确方法是什么,例如“但这是完全预期且正确的路线”或“实际上您指定的 foo-ID 不正确,这不是因为属性未设置而丢失”。
以不同方式表示该属性的缺失有哪些优点和缺点?