用于RESTful创建或更新的正确HTTP方法?

时间:2011-09-04 05:27:13

标签: web-services rest

我正在创建一个RESTful Web服务,允许我按名称导入文档。我会使用这样的路径导入文档:

/documents/frequently-asked-questions

如果该文件尚不存在,则会创建一个新文件;否则,它只会覆盖现有文档。

我遇到的问题是这是否是RESTful服务的错误端点。通常我会使用POSTs来创建和PUTs进行更新。这里不知道文件是否已经存在。如果这是合理的,那么什么是最好的HTTP方法?如果它不正确,那么什么是更好的方法?

2 个答案:

答案 0 :(得分:25)

HTTP 1.1规范说明了POST:

  

9.5 POST

     

POST方法用于请求源服务器接受请求中包含的实体,作为请求行中Request-URI标识的资源的新下级。

对于PUT:

  

9.6 PUT

     

PUT方法请求将所包含的实体存储在提供的Request-URI下。

考虑到这一点,以及PUT是幂等的而POST不是这样的事实,PUT似乎是创建和更新的合理选择。

来源: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2

答案 1 :(得分:0)

这是我使用 POSTPUT 的盐测试:

总体思路是POST用于创建,PUT用于更新。但在创建或更新场景中,它们都适用。这里的关键是您已经知道资源的 ID

所以...

如果 URL 包含文档的标识符,则使用 PUT,否则使用 POST

在您的情况下,标识符是已知的,并且在 URL 中,因此请使用 PUT