文件上传的 REST 设计[关闭]

2024-03-31

我想为文件上传服务创建一个 REST API,允许用户:

  1. 打开一个会话
  2. 上传一堆文件
  3. 关闭会话

然后,回来处理他们在上一个会话中上传的文件。

为了方便处理有关每个文件的数据以及处理文件本身的内容,这是我正在考虑使用的 URI 方案:

/sessions/
/sessions/3
/sessions/3/files
/sessions/3/files/5
/sessions/3/file/5/content
/sessions/3/file/5/metadata

这将允许文件元数据与文件内容分开处理。在这种情况下,文件上只允许使用 GETcontent和文件metadata,并且要更新任一文件,必须放置一个新文件。

这有道理吗?如果没有,为什么以及如何才能更好?


为什么需要会议?是出于身份验证和授权的原因吗?如果是这样我会使用httpbasic http://en.wikipedia.org/wiki/Basic_access_authentication使用 SSL 或digest http://en.wikipedia.org/wiki/Digest_access_authentication。因此,没有开始或结束会话,因为 http 是无状态的,并且每个请求都会发送安全标头。

上传资源的建议是直接映射为私有文件系统


# returns all files and subdirs of root dir
GET /{userId}/files
GET /{userId}/files/file1
GET /{userId}/files/dir1
# create or update file
PUT /{userId}/files/file2



当上传文件内容时,您将使用多部分内容类型 http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html.

评论后修改答案

我将通过在上传有效负载内引入链接(到文件内容)来设计您想要的文件内容和有效负载分离。它简化了资源结构。

表示“上传”资源:


{
  "upload-content" : "http://storage.org/2a34cafa" ,
  "metadata" : "{ .... }" 
}

资源行动:


# upload file resource
POST /files
-> HTTP 201 CREATED 
-> target location is shown by HTTP header 'Location: /files/2a34cafa

# /uploads as naming feels a bit more natural as /files
POST /sessions/{sessionId}/uploads
-> HTTP 201 CREATED
-> HTTP header: 'Location: /sessions/{sessionId}/uploads/1
-> also returning payload

# Updating upload (like metadata)
/PUT/sessions/{sessionId}/uploads/1 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件上传的 REST 设计[关闭] 的相关文章

随机推荐