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