REST API - 如何处理 PUT 方法中的可选参数? PATCH 方法的实现有什么不同

标签 rest http

我对带有可选参数的 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/

相关文章:

rest - Blackberry HttpConnection 和查询字符串

wcf - C# WCF REST - 如何使用 JSON.Net 序列化器而不是默认的 DataContractSerializer?

java - 未经授权时如何使用android volley重新发送请求

带有 React 的 ASP.NET Core - 431 请求 header 太长

javascript - 使用未定义的数据库列中的快速结果将 html 形式的数据发送到 mysql 数据库

javax.ws.rs.core.Cookie vs javax.ws.rs.core.NewCookie ,有什么区别?

wcf - 为 WCF 服务自动生成 API Explorer

http - JMeter http 请求删除正文

http - 我可以将来自通过 HTTPS 提供的页面的未加密流量的域列入白名单吗?

c# - 更改发送给客户端的文件名?