我正在开发基于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
个查询(在其他任何地方都不需要)和我如果我能提供帮助,我希望保持标准化的要求。
答案 0 :(得分:1)
为什么要限制自己的GET和PUT?显然,你可以做一个POST请求来做任何你想做的事情。您可以将URL复制到源的源。您可以使用要从中复制的URL对目标进行POST。或者您可以将两个URL都发布到复制对象(我知道,不是最好的形式,但也不是非法的)。
GET和PUT仅在涉及单个资源时才有效。你有两个资源。涉及多个资源的任何操作都必须使用POST,并且您在使用它方面有相当大的自由度。