我对带有可选参数的 put 方法有点困惑。
假设模式是
Pet {
name
catagory
tag (optional)
}
当我想创建一个宠物时,我可以使用post方法,标签
可以省略。
当我想更新宠物时,问题就来了。根据 http 规范,PUT
方法将通过替换整个资源来更新实体,这意味着我需要传递 tag
参数。如果我没有传递 tag
,默认值将为空,但会导致现有标签被覆盖为空。
对于patch
方法,无论是否可选,它只会更新部分参数。一目了然。
不知道是不是我理解有误,目前在PUT方法中,需要弄清楚传递的参数是什么,然后更新对应的字段。但这似乎与 PATCH
方法相同。
最佳答案
需要理解的重要一点是,HTTP 规范描述了语义(不同的请求意味着什么),但没有描述实现(你是怎么做的)。这是故意的 - 规范基本上说您的服务器应该伪装成键/值存储,但它不限制您如何实现它。
PUT大致类似于保存文件:“这里是一个字节数组,使用这个键保存它”。如果您的存储是文件系统,则只需将字节数组写入磁盘即可。如果您的存储是内存缓存,那么您只需更新缓存的副本。
如果您的存储是一些 RDBMS 数据库?然后您需要做一些工作,确定数据库中的哪些行需要更改,以及需要将哪些命令发送到数据库以实现更改。
关键是客户端不关心 - 作为服务器,您可以将底层存储从 RDBMS 更改为文档存储到文件系统或任何其他内容,这与客户无关。
in PUT method, I need to figure out what parameter is passed, and then update correspond field. But this seems the same with PATCH method.
是的。在这两种情况下,您都需要弄清楚如何就地编辑您的资源。
PUT 可能感觉更简单一些,因为它在语义上等同于“删除旧版本,然后创建新版本”。您不必担心将提供的数据合并到您已经存储的状态。
关于REST API - 如何处理 PUT 方法中的可选参数? PATCH 方法的实现有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54954894/