首页 > 解决方案 > 宁静的网络服务:如何测试具有 {id} 的项目是否存在?

问题描述

您将如何检查具有 {Id} 的项目是否存在?

  1. POST item/Id => 404 它不存在。409 它存在
  2. GET item/Id => 404 不存在。200 它存在
  3. HEAD 项目/Id => 404 不存在。200 它存在

我猜最好的选择是 3。除非 HEAD 动词被过滤。

1有意义吗?(不记得我在哪里看到这个建议) 1 可以很好地理解为创建项目并尝试将其插入为“Id”,在这种情况下,如果成功则返回 200(而不是 404)

标签: restrestful-url

解决方案


如何测试具有 {id} 的项目是否存在?

REST 并没有真正的项目,它有资源(资源可能指的是一个项目——但这实际上是一个实现细节)。

此外,“存在”在 REST 中并不是一个真正的概念

一个资源可以映射到一个空集,它允许在一个概念的任何实现存在之前对该概念进行引用——这个概念对于万维网之前的大多数超文本系统来说是陌生的

404不会告诉您资源不存在 - 它会告诉您该资源当前没有可用的表示。不完全一样。

那就是说...

如果您尝试向源服务器发送有关资源的消息,并希望确保这样做不会对财产造成损害,那么正确的做法是使用具有安全语义的方法之一。

如果定义的语义本质上是只读的,则请求方法被认为是“安全的”;即,客户端不请求也不期望由于将安全方法应用于目标资源而导致源服务器上的任何状态更改。

所以你的列表,GET或者HEAD是合适的,但不是POST(因为 POST 没有安全的语义)。


推荐阅读