我正在为备份服务创建REST API,原则上这很简单:
uid
; fid
; POST
将文件发送到/backups/<uid>
并返回位置GET
s /backups/<uid>
以及fid
的某些索引GET
s /backup/<uid>/<fid>
中选择一个文件,然后返回该文件。现在,我希望通过将上传和下载委托给像Amazon S3这样的服务来大大减少我服务器的流量。
重定向下载不是问题,因为我只能对某些生成的过期网址执行常规重定向(301
或307
?)。
但是上传呢?我希望有这样的东西:
POST
文件到我的服务器PUT
生成过期网址并重定向到该PUT
将文件发送到服务器提供的URL 重点是,所有这些都需要对用户尽可能透明。
答案 0 :(得分:2)
我不认为初始POST应该包括整个实体。相反,POST必须明确地是要创建“上载桶”资源的请求。然后,您只需使用201 Created
响应POST请求,Location
标头指向应上载文件的新资源。
如果选择的上传存储桶必须依赖于文件的细节(文件大小,类型),那么我会让客户端在POST正文中提交元数据。