REST API - 如何处理 PUT 方法中的可选参数?与 PATCH 方法实现的区别是什么?

3

我对具有可选参数的put方法有点困惑。

假设模式为

Pet {
  name 
  catagory
  tag  (optional)
}

当我想创建宠物时,可以使用post方法,可以省略tag标签。 当我想更新宠物时,问题来了。根据http规范,PUT方法将通过替换整个资源来更新实体,这意味着我需要传递tag参数。如果我没有传递tag,默认值将为空,但会导致现有的标记被覆盖为空。
对于patch方法,它只更新部分参数,无论是否是可选的。很容易理解。
我不知道是否有误解,目前在PUT方法中,我需要找出传递了哪些参数,然后更新相应的字段。但这似乎与PATCH方法相同。
1个回答

4
重要的一点是要明白,HTTP规范描述了语义(不同请求的含义),但不描述实现方式(如何实现)。这是故意的 - 规范基本上说,您的服务器应该假装是一个键/值存储,但它不限制您如何实现它。 PUT 大致相当于保存文件:“这里是一组字节,请使用此键保存”。如果您的存储是文件系统,则只需将字节数组写入磁盘。如果您的存储是内存缓存,则只需更新缓存副本。
如果您的存储是某个RDBMS数据库?那么您需要做一些工作,确定哪些行需要更改,并发送到数据库以进行更改的命令。
关键在于客户端并不关心 - 作为服务器,您可以将底层存储从RDBMS更改为文档存储或文件系统等,这不是客户端的事情。
在PUT方法中,我需要弄清楚传递了哪个参数,然后更新相应的字段。但这似乎与PATCH方法相同。 是的,在两种情况下,您需要弄清楚如何直接编辑您的资源。 PUT可能感觉稍微容易一些,因为它在语义上等同于“删除旧版本,然后创建新版本”。您不必担心将提供的数据与已存储的状态进行合并。

谢谢您的回答,我明白了。我知道为什么会有这个问题,我会注意实现 http 规范。 - jolla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接