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

时间:2019-03-02 03:16:21

标签: rest http

对于带有可选参数的put方法,我有些困惑。

假设模式为

Pet {
  name 
  catagory
  tag  (optional)
}

当我要创建Pet时,可以使用post方法,tag可以省略。 当我想更新宠物时,问题就来了。根据http规范,PUT方法将通过替换整个资源来更新实体,这意味着我需要传递tag参数。如果我没有通过tag,则默认值为空,但它将导致现有标签被覆盖为空。

对于patch方法,它将仅更新部分参数,无论该参数是否可选。很容易理解。

我不知道我是否误解了,目前,在PUT方法中,我需要弄清楚传递了什么参数,然后更新对应字段。但这与PATCH方法似乎相同。

1 个答案:

答案 0 :(得分:2)

要了解的重要一点是,HTTP规范描述了语义(不同请求的含义),但没有描述实现(如何实现)。这是有意的-规范基本上说您的服务器应该假装为键/值存储,但并不限制您如何实现它。

PUT大致类似于保存文件:“这是一个字节数组,使用此键保存”。如果您的存储是文件系统,则只需将字节数组写入磁盘。如果您的存储是内存中缓存,则只需更新缓存的副本。

如果您的存储是一些RDBMS数据库?然后,您需要做一些工作,确定需要更改数据库中的哪些行,以及需要向数据库发送哪些命令以实现此目的。

重点是客户端不在乎-作为服务器,您可以将基础存储从RDBMS更改为文档存储,再将文件系统更改为文件系统,而这与客户端无关。

  

在PUT方法中,我需要找出要传递的参数,然后更新对应的字段。但这与PATCH方法似乎相同。

是的。在这两种情况下,您都需要弄清楚如何就地编辑资源。

PUT可能会更容易一点,因为它在语义上等效于“删除旧版本,然后创建新版本”。您不必担心将提供的数据合并到已经存储的状态。