为 REST 接口编写一次语义



我们有一个REST接口,允许客户端创建产品资源。产品可以与不同类型的元数据相关联。

/Product/{id}/metadata/{md_type}

团队希望特定类型的元数据只写入一次。应拒绝后续更新。

目前,PUT 请求用于创建元数据。未为元数据分配 ID。它是不可变的。如果元数据已存在,则 PUT 请求将被拒绝。

使用 PUT 感觉就像违反了 REST 语义。处理这种情况的最 RESTful 方法是什么?

使用 PUT 感觉就像违反了 REST 语义。处理这种情况的最 RESTful 方法是什么?

在这里使用 PUT 是完美的。

最简单的答案是,你错过了一个事实,即这是一个条件请求;如果客户端使用If-None-Match标头发送其请求,那么条件请求的所有通用处理都将"正常工作",如果资源已经有表示,服务器将返回412前提条件失败。

如果客户端不包含 If-None-Match 标头,那么我认为 412 不合适。 也许 405 方法不允许,或 409 冲突;403 禁止是有道理的,但可能会让那些认为必须涉及凭据问题的人类感到困惑。

拒绝后续 PAT 上的更新违反了 RESTful 接口最不意外的原则。

不,它没有。 由于PUT定义并约束请求的语义,因此它不要求服务器完成请求。

最新更新