RESTful“复制”的方法

时间:2017-06-01 04:50:48

标签: rest

我正在开发基于node.js的REST API,用于管理远程系统上的文件。要创建一个包含内容的新文件,我当前正在向URI发出PUT请求,其中请求的主体包含文件内容。要检索文件的内容,将发出GET请求,并且响应正文包含文件内容。

但是我很难确定实现复制功能的好方法。我目前唯一有效的方法是发出GET,检索源文件,然后用PUT请求重新发送内容。

我探索过的一个想法是发送目标文件的PUT请求,标题中的数据标识要从中复制数据的源文件。但是,API设计并不完全理想,但如果有必要,可以使用。

理想情况下,我希望能够为目标文件发出PUT请求,并且基本上将源文件的GET请求的主体重定向到PUT请求的主体,而不首先将整个文件内容下载到客户端。

我的问题是,是否有一种有效/适当的方式可以发出HTTP / S PUT请求,指定正文内容应该是不同URI的GET请求的主体将其下载到客户端?

API当前行为示例:

获取文件内容(sourcefile.ext)

GET https://server.com/directory/sourcefile.ext
# the body of the response if good is the file contents

使用内容(destinationfile.ext)创建文件

PUT https://server.com/directory/destinationfile.ext
# the body of the request is the desired file contents

理想的复制功能(sourcefile.ext - > destinationfile.ext)

PUT https://server.com/directory/destinationfile.ext
# somehow tell the request to pull the body from a GET request to 
# https://server.com/directory/sourcefile.ext
# being made by the API server rather than the client issuing both requests
# in succession

是的,可以使用PUT https://server.com/directory/destinationfile.ext?copySourceFile=sourcefile.ext,如果必须,我将使用它,但目前API中没有其他地方使用?var1=val1&var2=val2个查询(在其他任何地方都不需要)和我如果我能提供帮助,我希望保持标准化的要求。

1 个答案:

答案 0 :(得分:1)

为什么要限制自己的GET和PUT?显然,你可以做一个POST请求来做任何你想做的事情。您可以将URL复制到源的源。您可以使用要从中复制的URL对目标进行POST。或者您可以将两个URL都发布到复制对象(我知道,不是最好的形式,但也不是非法的)。

GET和PUT仅在涉及单个资源时才有效。你有两个资源。涉及多个资源的任何操作都必须使用POST,并且您在使用它方面有相当大的自由度。