如何使用“POST to PUT redirect”建模REST API?

时间:2013-05-19 12:53:58

标签: http rest redirect amazon-s3 api-design

我正在为备份服务创建REST API,原则上这很简单:

  • 用户由某些uid;
  • 标识
  • 文件由某些fid;
  • 标识
  • 上传文件,用户POST将文件发送到/backups/<uid>并返回位置
  • 列出文件,返回用户GET s /backups/<uid>以及fid的某些索引
  • 要下载文件,用户从索引GET s /backup/<uid>/<fid>中选择一个文件,然后返回该文件。

现在,我希望通过将上传和下载委托给像Amazon S3这样的服务来大大减少我服务器的流量。

重定向下载不是问题,因为我只能对某些生成的过期网址执行常规重定向(301307?)。

但是上传呢?我希望有这样的东西:

  • 用户(不知道S3)开始POST文件到我的服务器
  • 服务器只接收标题(不是整个文件!)
  • 服务器在S3中确定某个地点,为PUT生成过期网址并重定向到该
  • 客户端PUT将文件发送到服务器提供的URL
  • 服务器会收到成功上传的通知

重点是,所有这些都需要对用户尽可能透明。

1 个答案:

答案 0 :(得分:2)

我不认为初始POST应该包括整个实体。相反,POST必须明确地是要创建“上载桶”资源的请求。然后,您只需使用201 Created响应POST请求,Location标头指向应上载文件的新资源。

如果选择的上传存储桶必须依赖于文件的细节(文件大小,类型),那么我会让客户端在POST正文中提交元数据。