rest - 为 REST 接口编写一次语义
问题描述
我们有一个允许客户端创建产品资源的 REST 接口。产品可以与不同类型的元数据相关联。
/产品/{id}/元数据/{md_type}
团队希望只写入一次特定类型的元数据。应拒绝后续更新。
目前,PUT 请求用于创建元数据。元数据未分配 ID。它是不可变的。如果元数据已存在,则拒绝 PUT 请求。
使用 PUT 感觉就像违反了 REST 语义。处理这种情况的最 RESTful 方式是什么?
解决方案
使用 PUT 感觉就像违反了 REST 语义。处理这种情况的最 RESTful 方式是什么?
在这里使用PUT是完美的。
最简单的答案是您错过了这是一个Conditional Request的事实;如果客户端要发送带有If-None-Match标头的请求,那么所有对条件请求的通用处理都将“正常工作”,如果资源已经具有表示,则服务器返回412 Precondition Failed 。
如果客户端不包含 If-None-Match 标头,那么我认为 412 不合适。可能是405 Method Not Allowed,或者409 Conflict;403 Forbidden是正确的,但可能会使认为这必须涉及凭据问题的人感到困惑。
拒绝后续 PUT 的更新违反了 RESTful 接口的最小意外原则。
不,它没有。因为PUT
定义和约束了请求的语义,它并不强制服务器完成请求。
推荐阅读
- state - Ansible mount with state:mounted not working for sshfs
- regex - 正则表达式 - 查找所有空格并忽略多行字符串中的连字符分隔的单词
- java - 如何使 hibernate cfgxml 文件能够定位?
- thymeleaf - 创建一个百里香片段列表并将其作为参数传递给另一个片段
- python - 使用 Scrapy 从论坛获取搜索结果
- c++ - 耦合策略模式中的两个行为之间需要和共享大量计算。应该在哪里做和举行
- javascript - 尽管提供了唯一键,但 React 为单选按钮(在地图中)提供了唯一键警告
- oauth-2.0 - 安全原生应用 OAuth2 代码流 + PKCE
- delphi - 避免在文本编辑器中出现不可见的不可打印字符
- sql-server - 如何从sql中的XML字段数据中查询特定标签?