RESTful API应该能够返回文件还是仅返回一个位置


12

这一直困扰着我一段时间。

例如,我们有一个REST API,它为系统提供基本内容,并使用和生成JSON。在此终结点处,它会生成指向图片和描述的URL,并且可以这样找到:// localhost / myApi / pictures / 1

{
    id: 1,
    description: "This is a pretty picture of a daisy",
    URL: <OUR URL>
}

现在,OUR_URL应该指向API上的某个位置,例如// localhost / myApi / files / pictures / 1,该位置返回JPG(API后面的应用程序读取文件的物理内容,然后将其流回客户端)。显然,这与生成JSON响应的其余API不同,并且读取和流式传输实际文件会产生开销。

另外,OUR_URL应该指向REST服务范围之外的URL,因此//localhost/files/pictures/1.jpg可以直接在其中读取文件。

所以问题是:

RESTful API应该能够返回文件还是仅返回一个位置?


1
您确实意识到什么是REST的一般描述等同于“客户端向URL请求并服务器返回内容”,对吗?整个想法是,REST是非常松散定义的,并且能够适应几乎所有基于URL的检索方案。

Answers:


17

RESTful服务应向API用户提供资源。资源可以具有多种格式,范围从JSON或XML到JPEG和HTML。

甚至没有要求,甚至没有期望,单个API仅服务于单一格式的资源。在URI上提供JSON文档并从URI /myApi/pictures/1提供JPEG文件没有错/myApi/files/pictures/1
在更极端的情况下,甚至可以根据请求者要求的格式,从同一URL提供JSON描述和JPEG文件。


7

仅返回URI就会遇到的一个问题是,普通的旧文件服务器无法实现安全性。因此,如果您需要限制谁可以访问文件,那么您将需要能够直接在REST API中返回该文件(否则,如果用户没有权限,则该文件为处于不正确的状态等)。

否则,返回简单的旧URI并将其传递到专用CDN会在配置,简单性和可伸缩性方面带来很多好处-假设这就是您所要做的。


身份验证方面非常好,这是我从未考虑过的。
疯狂的恐龙
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.