Http 如何用“创建REST API模型”;发布以放置重定向“;?
我正在为备份服务创建一个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 但是上传呢?我希望有
- 用户由一些
标识李>uid
- 文件由一些
标识李>fid
- 要上载文件,用户将文件发布到
,并返回位置/backups/
- 要列出文件,将返回用户
sGET
和/backups/
s的一些索引fid
- 要下载文件,用户从索引中选择一个,
sGET
,然后返回文件/backup/
301
或307
?)到生成的过期URL
但是上传呢?我希望有这样的东西:
- 用户(不知道S3)开始
向我的服务器发布
文件
- 服务器只接收标题(而不是整个文件!)
- 服务器确定S3中的一个位置,为
生成一个过期URL,并重定向到该URLPUT
- 客户端
将文件放入服务器传递的URL中
- 服务器收到上载成功的通知
关键是,它需要对用户尽可能透明。我认为最初的帖子不应该包括整个实体。相反,POST必须明确地是对要创建的“upload bucket”资源的请求。然后,您只需使用创建的
201
响应POST请求,其中位置
头指向应该上载文件的新资源
如果选择的上传桶必须取决于文件的具体情况(文件大小、类型),那么我会让客户端在帖子正文中提交元数据。在这种情况下,
PUT
的位置将不再有效,这不是毫无疑问的吗?通常情况下,如果你把某件东西放到上,你会期望以后能够得到它。我认为没有这种期望。在任何时间点(也就在PUT之后),另一个客户机都可以对特定资源发出DELETE。您所描述的“PUT,GET”序列并不是在一个事务中发生的。更准确地说,我认为可以说,有一种“期望”,即在PUT之后,GET将返回已放置在那里的实体,但不需要这样做。如果未满足客户机的期望,则表示另一个客户机一直在忙于处理资源。请注意,在我尝试此实现之前,可能需要一段时间。REST(双关语)确信,如果结果令人满意,我会回来接受答案。