我正在创建一个RESTful Web服务,允许我按名称导入文档。我会使用这样的路径导入文档:
/documents/frequently-asked-questions
如果该文件尚不存在,则会创建一个新文件;否则,它只会覆盖现有文档。
我遇到的问题是这是否是RESTful服务的错误端点。通常我会使用POSTs来创建和PUTs进行更新。这里不知道文件是否已经存在。如果这是合理的,那么什么是最好的HTTP方法?如果它不正确,那么什么是更好的方法?
答案 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)
这是我使用 POST
与 PUT
的盐测试:
总体思路是POST
用于创建,PUT
用于更新。但在创建或更新场景中,它们都适用。这里的关键是您已经知道资源的 ID。
所以...
如果 URL
包含文档的标识符,则使用 PUT
,否则使用 POST
。
在您的情况下,标识符是已知的,并且在 URL 中,因此请使用 PUT
。