使用JSONAPI

时间:2018-05-31 13:42:26

标签: ruby-on-rails json-api

我使用Rails 5作为移动应用的后端。我试图解决的问题是从应用程序接收包含有关客户的信息加上2张照片的请求。经过短暂的处理后,出现了两个选项:

  1. 首先在multipart / form-data POST中发送文件,然后将ID返回给客户端。在那之后"真实"请求再次发送,服务器应该将ID(元数据)和文件关联起来。
  2. 发送文件为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"
    
  3. 我对这两种方法的担忧分别是:

    1. 由于我们期待2个文件,我们是否应该为每个文件提出请求?如果第二个呼叫未到达服务器或无效,预计会发生什么?
    2. 我们应该接受多少字节?我想的是10MB,但我不确定这是不是一个好主意以及服务器将如何反应?首先在UI级别(移动应用程序)验证文件的类型和大小是一个好主意吗?
    3. 如果有人能提出别的建议,我会非常感激。此外,如果您对此问题有任何经验,请分享您使用过的有用参考资料,我也将非常感激。

1 个答案:

答案 0 :(得分:0)

1)如果您在一个请求中需要2个文件 - 将2个文件作为multipart / form-data传递,那就完全没问题了。如果你使用b64,你首先编码所有内容,然后解码所有内容。不是最好的主意。

2)您应该在前端和后端验证这些文件。最大字节数应该类似于max_file1_size + max_file_2_size + max_other_fields_size + headers_size,而不是猜测然后尝试。

3)使用carrierwave - 漂亮的宝石,这将是一个不错的选择,你将获得更少的空间来捣乱:)