【发布时间】:2018-05-31 22:29:53
【问题描述】:
我使用 Rails 5 作为移动应用程序的后端。我要解决的问题是收到来自应用的请求,其中包含有关客户的信息以及 2 张照片。短暂接近后,出现了两个选项:
- 首先在 multipart/form-data POST 中发送文件,然后将 ID 返回给客户端。之后再次发送“真实”请求,服务器应将 ID(元数据)和文件关联起来。
-
以
Base64.encoded格式发送文件,无需更改 JSON 标头。比如:curl -X POST \ -H "Content-Type: application/vnd.api+json" \ -H "Cache-Control: no-cache" \ -d '{ "data": { "type": "identities", "attributes": { "param1": "first param", "param2": "second param", "image1": "data:image/png;base64,iVBORw0KGgoAAAANSU.....", "image2": "data:image/png;base64,iVBORw0KGgoAAAANSU....." } }' "http://API_URL/identity"
我对这两种方法的担忧分别是:
- 既然我们期望有 2 个文件,我们是否应该为每个与 ID 相关联的文件提出请求?如果第二次调用未到达服务器或无效,预计会发生什么情况?
- 我们应该接受多少字节?我在考虑 10MB 但我不确定这是否是个好主意以及服务器将如何反应?首先在 UI 级别(移动应用)验证文件的类型和大小是否是个好主意?
如果有人可以提出其他建议,我将不胜感激。另外,如果您对此问题有任何经验,请分享您使用过的有用参考资料,我也将不胜感激。
【问题讨论】:
-
您是否需要严格遵守 JSON API 规范?否则,您可以将请求作为 multipart/form-data 发送,包括文件和 JSON API 文档作为另一个属性。这将允许有一个事务性请求,但不会出现由发送 base64 编码的文件和解析大约 20MB 的 JSON 所引入的性能问题。
-
是的,我有这个要求。我还考虑将请求的大小限制为 10 MB,以免出现这些性能问题。