web-services - RESTful复制/移动操作?

标签 web-services rest

我正在尝试设计类似RESTful文件系统的服务,而复制/移动操作给我带来了一些麻烦。

首先,使用PUT将新文件上传到文件的最终URL:

PUT /folders/42/contents/<name>

问题是,如果新文件已经以其他URL驻留在系统上,该怎么办?

复制/移动提示1 :带有自定义 header 的PUT。

这类似于S3's copy。一个看起来与上载相同的PUT,但带有一个自定义 header :
PUT /folders/42/contents/<name>
X-custom-source: /files/5

很好,因为在复制/移动时很容易更改文件名。但是,S3不提供移动操作,可能是因为使用此方案进行的移动不是幂等的。

复制/移动想法2 :POST到父文件夹。

这类似于Google Docs copy。到目标文件夹的POST,其中包含描述源文件的XML内容:
POST /folders/42/contents
...
<source>/files/5</source>
<newName>foo</newName>

我也许可以发布到文件的新URL来更改其名称..?否则,我会在XML内容中指定一个新名称,这会放大此想法的RPCness。它也与上载操作不一样(如想法1所示)。

最终,我正在寻找易于使用和理解的内容,因此,除了对上述内容提出批评之外,当然也欢迎提出新的想法!

最佳答案

HTTP规范说如果资源已经存在,则您更新资源并返回200。
如果资源不存在,则创建它,然后返回201。

编辑:
好吧,我读错了。我更喜欢POST而不是父文件夹方法。您还可以使用查询字符串参数引用源文件。例如

POST /destination/folder?sourceFile=/source/folder/filename.txt

关于web-services - RESTful复制/移动操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3017143/

相关文章:

rest - 在 REST 中起草一篇文章

jquery - 以 Restful 方式销毁嵌套资源

rest - 在 Grails 中发送带有 JSON 负载的 HTTP POST 的最佳方式

java - 如何在 WebServiceTemplate 上设置代理服务器详细信息

c# - 未检测到 Web 服务?

spring - 进行微服务 REST API 版本控制的最佳方法是什么?

amazon-web-services - 使用 delphi 向 Amazon API 请求 : Got HTTP/1. 1 403 禁止

java - 如何使用 Slf4j 的 Logback 实现通过 Spring 记录 SOAP 客户端消息

web-services - spring web services - 如何在方法端点中获取字符串有效负载?

c# - System.Web.Services.Protocols.SoapException : Server was unable to process request. ---> System.ArgumentNullException