当前位置:  开发笔记 > 运维 > 正文

如何使用REST建模文件系统操作?

如何解决《如何使用REST建模文件系统操作?》经验,为你挑选了1个好方法。

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

作为问题的答案如何在REST中实现资源的复制粘贴?建议,首选的实现cp方式包括获取资源,删除它并使用新名称再次将其恢复.

但如果我需要有效地做呢?例如,如果资源的规模很大?如何消除资源有效负载到客户端和返回原始服务器的多余传输?

这是一个例子.我有一个资源:

/videos/my_videos/2-gigabyte-video.avi

我想将它复制到一个新资源:

/videos/johns_videos/copied-2-gigabyte-video.avi

我如何以RESTful方式实现复制,移动或其他文件系统操作?还是有正确的方法?我做错了吗?



1> 小智..:

我不相信任何给定的答案都是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/2-gigabyte-video.avi)位置(/videos/johns_videos/copied-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指令).

不了解下划线存储 - 客户端不关心硬/软链接或写时复制优化,也不应该知道它们.

迈克布朗

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有