对于带有可选参数的put方法,我有些困惑。
假设模式为
Pet {
name
catagory
tag (optional)
}
当我要创建Pet时,可以使用post方法,tag
可以省略。
当我想更新宠物时,问题就来了。根据http规范,PUT
方法将通过替换整个资源来更新实体,这意味着我需要传递tag
参数。如果我没有通过tag
,则默认值为空,但它将导致现有标签被覆盖为空。
对于patch
方法,它将仅更新部分参数,无论该参数是否可选。很容易理解。
我不知道我是否误解了,目前,在PUT方法中,我需要弄清楚传递了什么参数,然后更新对应字段。但这与PATCH
方法似乎相同。
答案 0 :(得分:2)
要了解的重要一点是,HTTP规范描述了语义(不同请求的含义),但没有描述实现(如何实现)。这是有意的-规范基本上说您的服务器应该假装为键/值存储,但并不限制您如何实现它。
PUT大致类似于保存文件:“这是一个字节数组,使用此键保存”。如果您的存储是文件系统,则只需将字节数组写入磁盘。如果您的存储是内存中缓存,则只需更新缓存的副本。
如果您的存储是一些RDBMS数据库?然后,您需要做一些工作,确定需要更改数据库中的哪些行,以及需要向数据库发送哪些命令以实现此目的。
重点是客户端不在乎-作为服务器,您可以将基础存储从RDBMS更改为文档存储,再将文件系统更改为文件系统,而这与客户端无关。
在PUT方法中,我需要找出要传递的参数,然后更新对应的字段。但这与PATCH方法似乎相同。
是的。在这两种情况下,您都需要弄清楚如何就地编辑资源。
PUT可能会更容易一点,因为它在语义上等效于“删除旧版本,然后创建新版本”。您不必担心将提供的数据合并到已经存储的状态。