我应该如何从PHP编写的RESTful api提供二进制文件(图像/音频)



我正在计划一个RESTful API,我想知道在API上提供文件/文件包的最佳方式。

我可能错过了一些东西,但正如我看到的,我的选择是:

  1. Base64_encode文件和JSON响应中的服务
  2. 在JSON响应中提供指向文件的链接。

我还需要记住,其中一些文件是私有的,只有在成功的身份验证后才能提供。

我也简要地看了一下mod_xsendfile的实现,想知道这是否是我应该考虑的一条路线。

世界上最常用的api,如Facebook, Flickr和Instagram提供静态链接到图片。

如果你提供base64编码的二进制文件,它们将更重,并且在服务器端和客户端都需要更多的CPU资源来编码/解码它们。

唯一有好处的情况是,如果你想发送许多非常小的文件,如图标。

一般来说,使用基于ASCII的协议来传输二进制文件是一个(非常)糟糕的主意,特别是当它们很重的时候。您可以公开一个URI,消费者可以在不使用REST API的情况下下载文件,并使用单独的PHP脚本(或任何其他类型的语言)使用会话执行访问控制部分,并输出具有所需HTTP头的真正二进制数据。最后一部分非常简单。

http://fr2.php.net/manual/en/function.fpassthru.php说明如何轻松输出二进制数据。

希望能有所帮助。

最新更新