rest - 宁静的网络服务:如何测试具有 {id} 的项目是否存在?
问题描述
您将如何检查具有 {Id} 的项目是否存在?
- POST item/Id => 404 它不存在。409 它存在
- GET item/Id => 404 不存在。200 它存在
- HEAD 项目/Id => 404 不存在。200 它存在
我猜最好的选择是 3。除非 HEAD 动词被过滤。
1有意义吗?(不记得我在哪里看到这个建议) 1 可以很好地理解为创建项目并尝试将其插入为“Id”,在这种情况下,如果成功则返回 200(而不是 404)
解决方案
如何测试具有 {id} 的项目是否存在?
REST 并没有真正的项目,它有资源(资源可能指的是一个项目——但这实际上是一个实现细节)。
此外,“存在”在 REST 中并不是一个真正的概念
一个资源可以映射到一个空集,它允许在一个概念的任何实现存在之前对该概念进行引用——这个概念对于万维网之前的大多数超文本系统来说是陌生的
404
不会告诉您资源不存在 - 它会告诉您该资源当前没有可用的表示。不完全一样。
那就是说...
如果您尝试向源服务器发送有关资源的消息,并希望确保这样做不会对财产造成损害,那么正确的做法是使用具有安全语义的方法之一。
如果定义的语义本质上是只读的,则请求方法被认为是“安全的”;即,客户端不请求也不期望由于将安全方法应用于目标资源而导致源服务器上的任何状态更改。
所以你的列表,GET
或者HEAD
是合适的,但不是POST
(因为 POST 没有安全的语义)。
推荐阅读
- elasticsearch - 在尊重 ACL 的同时使用 janusgraph 进行搜索
- user-interface - 更改组合框中的字符串选项
- angularjs - Angularjs 应用程序无法在 chromedriver 75 及更高版本启动的 chrome 76 上正确加载 UI
- excel - SSIS 不会为动态 xlsx 文件名执行 foreach 循环
- react-native - 运行 Xcode iOS 模拟器时出现 Expo 错误:模拟器中没有可用的 iPhone 设备
- java - 更改android应用程序自适应drawable?
- javascript - 如何将数据从 Vue.js 传递到 Blade 视图?
- vim - vi/vim remap 或 unmap 内置命令 - 可视模式下的 u 键
- python - 如何自定义 django-ratelimit 403 禁止页面?
- javascript - javascript中如何实现字符串和连接?