REST设计用于文件上传

我需要为文件上传服务制作REST API,以便用户执行以下操作:

  • 打开一个会话
  • 上传一堆文件
  • 关闭会话
  • 然后,回过头来,对他们在上一次会话中上传的文件进行处理。

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

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

    这将允许文件元数据与文件内容分开处理。 在这种情况下,文件内容和文件元数据只允许GET,并且要更新其中任何一个,新文件必须是PUT。

    这有意义吗? 如果没有,为什么以及如何更好?


    你为什么需要会议? 是否出于身份验证和授权原因? 如果是这样,我会使用SSL基本或摘要。 因此,没有开始或结束会话,因为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
    
    
    
    

    上传文件内容时,您将使用多部分内容类型。

    修改后的评论回答

    我会通过在上传有效负载中引入链接(到文件内容)来设计你想分离的文件内容和有效载荷。 它缓解了资源结构。

    表示'上传'资源:

    
    {
      "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 
    
    
    
    链接地址: http://www.djcxy.com/p/48629.html

    上一篇: REST design for file uploads

    下一篇: how to get parameters' value from curl in REST web service in java