REST - 如何在文件存储库项目中公开文件?

时间:2015-08-11 07:20:44

标签: java rest

我正在编写简单的Web文件存储库项目。客户端向我发送了一个POST的文件:

POST /file
<binary data>

并获取该文件的hash作为回复。

他可以发送图像,文档等。我想为他提供一个从哈希应用程序中检索这些文件的最佳方法。所以他可以致电:

GET /file/{hash}

并检索binary版文件。

或许更好的方法是给他文件属性,如:

{
    type: "image/png"
    bytes: 1024,
    properties: [{
        width: 100,
        height: 200
    }]
}

然后在网址下:

GET /file/{hash}?base64

他将获得Base64编码文件,并在

GET /file/{hash}?binary

将二进制版文件响应?哪种方法更好,更RESTful?

2 个答案:

答案 0 :(得分:1)

我认为这取决于您的需求。如果你不需要额外的文件属性,我会选择前者。

顺便说一下,也许你会发现鼓舞人心的看看Google Drive API: https://developers.google.com/drive/v2/reference/

答案 1 :(得分:1)

理论上,当您向POST方法发送回复时,您应该返回ID,以及您收到的正文和201 Created HTTP状态代码。当然,在这种特殊情况下,它根本没有意义。所以:

  1. POST请求的响应应标记为301 Moved Permanently并且Location(例如/files/{hash}标头设置为指向客户端可以获取文件的端点数据

  2. 如果客户端从提到的Location标头请求URL,它可能会收到带有基本文件描述的JSON内容(大小,内容类型,哈希,无论需要什么)

  3. 应提供单独的端点(例如/files/{hash}/data/)以返回文件原始数据。客户端也应该可以设置它想要获取的数据格式,但不能仅通过查询参数名称(?binary?base64),而是使用键值对。 (?format=binary)。