一些文件系统的基本操作有明显的对应物(例如 ls
和 rm
),但是您将如何实现不直接的 RESTful 操作,例如 cp
或 mv
?
作为问题的答案How to implement copy paste of a resource in REST?建议,实现cp
的首选方式将包括获取资源,删除它并用新名称再次放回它。
但是,如果我需要有效地做到这一点呢?例如,如果资源的大小会很大?我将如何消除将资源的有效负载多余地传输到客户端并返回到原始服务器?
这是一个插图。我有一个资源:
/videos/my_videos/2-gigabyte-video.avi
我想将它复制到一个新资源中:
/videos/johns_videos/copied-2-gigabyte-video.avi
我将如何以 RESTful 方式实现复制、移动或其他文件系统操作?或者有没有合适的方法?我做错了吗?
最佳答案
我不相信任何给定的答案都是 RESTful 的。这就是我要做的。
对于副本:
PUT /videos/johns_videos/copied-2-gigabyte-video.avi
HOST: www.server.com
Content-Location: /videos/johns_videos/2-gigabyte-video.avi
[empty-body]
将内容放在 (/videos/johns_videos/copied-2-gigabyte-video.avi) 的位置 (/videos/johns_videos/2-gigabyte-video.avi)。
移动将是带有删除的副本,要检查副本和删除之间的一致性,您需要使用在 PUT 的响应中提供给您的修订号。
PUT /videos/johns_videos/copied-2-gigabyte-video.avi
HOST: www.server.com
Content-Location: /videos/johns_videos/2-gigabyte-video.avi
[empty-body]
201 Created
ETag: "3e32f5a1123afb12" (an md5 of the file)
Location: /videos/johns_videos/copied-2-gigabyte-video.avi
[empty-body]
DELETE /videos/johns_videos/2-gigabyte-video.avi
HOST: www.server.com
If-Match: "3e32f5a1123afb12"
[empty-body]
204 No Content
[empty-body]
为什么这是 RESTful?
迈克·布朗
关于file - 如何使用 REST 对文件系统操作进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860467/