我正在尝试设计类似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/