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

Wil*_*ler 18 rest web-services

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

/documents/frequently-asked-questions
Run Code Online (Sandbox Code Playgroud)

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

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

小智 25

对于POST,HTTP 1.1规范说:

9.5 POST

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

对于PUT:

9.6 PUT

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

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

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

  • 我同意,并补充说WebDAV是问题集的现有解决方案,它也使用PUT. (2认同)

Ste*_*gin 5

这是我使用POSTvs的盐测试PUT

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

所以...

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

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