file - 如何使用 REST 对文件系统操作进行建模?

标签 file rest filesystems

一些文件系统的基本操作有明显的对应物(例如 lsrm ),但是您将如何实现不直接的 RESTful 操作,例如 cpmv ?

作为问题的答案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?
  • 不将“移动”或“复制”附加到 URI(即 RPC)
  • 它使用 PUT(POST 是附加到集合,目标 URI 不完全已知)
  • 它不使用 RPC 而非 REST 发送的“命令”(例如 XML 指令)。
  • 不了解下划线存储 - 客户不关心硬/软链接(soft link)或复制优化,也不应该知道它们。

  • 迈克·布朗

    关于file - 如何使用 REST 对文件系统操作进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860467/

    相关文章:

    python - 如何检查没有扩展名的文件类型?

    c - 将大型结构转储到文本文件的一些智能方法

    wcf - 如何为新的Silverlight应用程序在WCF,REST,POX和RIA服务之间进行选择

    java - Jersey 客户端 - 如何通过 POST 请求以表单形式发送列表

    python - SalesforceObject.search/get 不能一起工作? Python/简单-salesforce

    visual-studio-2010 - 如何在 C#.net 中为目标用户创建桌面路径

    java - 如何查找文件的目录

    file - Spark 分区/集群执行

    jquery - 使用jquery获取上传文件名到文本框中

    java - 丰富的文件系统