我正在构建一个REST API,并在返回响应代码周围有一个困境,以进行GET操作。我在网上找到了许多示例和答案,但没有针对我的特定情况。这是我到目前为止发现和理解的内容:
-
如果返回一个空列表(例如/library/authors/{fureId}/books (带有响应代码200的空列表将足够
-
如果请求具有ID的特定资源(例如/library/authors/{fureId}/books/{bookid} (,使用404
将响应为空
总结了我的大多数用例,我很好。
但是,如果我访问没有ID的子资源,会发生什么?
例如,出于争论的缘故,假设作者可以拥有很多书,但只有一本自动批学。他要么有一个,要么没有。我不希望用户通过自动二级联运ID传递,因为该系统可以自行弄清楚是否存在,端点就是这样:
get/library/authors/{fureId}/自动二人
如果作者存在但他没有自传(这是无效的(,HTTP响应代码是否为:
- 204 (空内容(
- 404 (资源不存在(
预先感谢您!
通过语义工作
GET /library/authors/1/auto-biography
/library/authors/1/auto-biography
是标识符。资源本身是一些概念,例如"作者1的自动传记";请注意,即使可能实际上还不存在,我们也可以谈论它。
资源可以映射到空集,该集合允许在该概念的任何实现之前对概念进行引用
http响应正文中出现的事物不是资源,而是资源的表示。
所以现在查看状态代码
404
404(未找到(状态代码表明原始服务器没有找到目标资源的当前表示形式,或者不愿意透露一个存在。
204
204(无内容(状态代码表明服务器已成功满足了请求,并且没有其他内容可以发送到响应有效负载主体中。
一个松散的类比:假设您尝试获取文件的内容。404
在语义上与FileNotFound对齐;204
表示文件长为零。
404
通常会伴随着"包含错误情况的说明的表示形式,以及它是暂时的还是永久的。"这表明客户端试图使用不可用的链接。
204
没有任何东西 - 表示为零字节长,如何有数据。这是200
响应的特殊情况,建议客户(和中介组件(有意将响应主体留为空白。