Http 如何用“创建REST API模型”;发布以放置重定向“;?

Http 如何用“创建REST API模型”;发布以放置重定向“;?,http,rest,redirect,amazon-s3,api-design,Http,Rest,Redirect,Amazon S3,Api Design,我正在为备份服务创建一个REST API,原则上非常简单: 用户由一些uid标识 文件由一些fid标识 要上载文件,用户将文件发布到/backups/,并返回位置 要列出文件,将返回用户GETs/backups/和fids的一些索引 要下载文件,用户从索引中选择一个,GETs/backup/,然后返回文件 现在,我想通过向AmazonS3这样的服务授权升级和下载,大大减少服务器的流量 重定向下载不是一个问题,因为我可以执行常规重定向(301或307?)到生成的过期URL 但是上传呢?我希望有

我正在为备份服务创建一个REST API,原则上非常简单:

  • 用户由一些
    uid
    标识
  • 文件由一些
    fid
    标识
  • 要上载文件,用户将文件发布到
    /backups/
    ,并返回位置
  • 要列出文件,将返回用户
    GET
    s
    /backups/
    fid
    s的一些索引
  • 要下载文件,用户从索引中选择一个,
    GET
    s
    /backup/
    ,然后返回文件
现在,我想通过向AmazonS3这样的服务授权升级和下载,大大减少服务器的流量

重定向下载不是一个问题,因为我可以执行常规重定向(
301
307
?)到生成的过期URL

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

  • 用户(不知道S3)开始
    向我的服务器发布
    文件
  • 服务器只接收标题(而不是整个文件!)
  • 服务器确定S3中的一个位置,为
    PUT
    生成一个过期URL,并重定向到该URL
  • 客户端
    将文件放入服务器传递的URL中
  • 服务器收到上载成功的通知

关键是,它需要对用户尽可能透明。

我认为最初的帖子不应该包括整个实体。相反,POST必须明确地是对要创建的“upload bucket”资源的请求。然后,您只需使用创建的
201
响应POST请求,其中
位置
头指向应该上载文件的新资源


如果选择的上传桶必须取决于文件的具体情况(文件大小、类型),那么我会让客户端在帖子正文中提交元数据。

在这种情况下,
PUT
位置将不再有效,这不是毫无疑问的吗?通常情况下,如果你把某件东西放到
上,你会期望以后能够
得到它。我认为没有这种期望。在任何时间点(也就在PUT之后),另一个客户机都可以对特定资源发出DELETE。您所描述的“PUT,GET”序列并不是在一个事务中发生的。更准确地说,我认为可以说,有一种“期望”,即在PUT之后,GET将返回已放置在那里的实体,但不需要这样做。如果未满足客户机的期望,则表示另一个客户机一直在忙于处理资源。请注意,在我尝试此实现之前,可能需要一段时间。REST(双关语)确信,如果结果令人满意,我会回来接受答案。