如何在JSON API响应中指定特定字段的content-type和content-transfer-encoding?

63lcw9qa  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在开发一个API,给定一个包含特定内容的请求体,它会生成一个可以是不同格式的文档(例如PDF,png等)。考虑到文档可以是二进制文件,该文件是base64编码的,并放置在一个JSON响应中,如下所示:

{
   "document": "document base64-encoded"
}

字符串
回答可能包含其他字段,但它们与问题无关。

问题是:

指定document字段的内容类型(例如PDF)和内容编码(例如base64)的最佳方法是什么?
我想到了一些选择,但我想听听你的建议。

我的选择

  • 使用头参数Content-TypeContent-Transfer-Encoding:我假设这个选项是错误的,因为这些参数应用于消息本身,在本例中是没有任何编码的application/json
  • 指定自定义参数(例如x-document-content-typex-document-content-tranfer-encoding
  • 在响应体中包含这样的元数据,如下所示:
{
   "document": {
      "content": "document base64-encoded",
      "type": "pdf",
      "encoding": "base64"
   }
}

f45qwnt8

f45qwnt81#

这里有两层通信,每层都有自己的合约/协议。您自己的JSON API协议,通过HTTP协议发送。您应该坚持HTTP标准以遵守该层的合约,并且由您定义JSON数据的合约。
上面提到的HTTP头是用来告诉用户代理/客户端HTTP主体的MIME类型是什么。这必须是application/JSON才能符合HTTP标准。如果你偏离了这个,它将不再是有效的HTTP流量,一个常规的、配置良好的HTTP客户端将无法使用你的API。
HTTP消息中的JSON主体可以填充任何API的消费者使用编码内容所需的内容。您在这里定义了自己的合约,因此它实际上取决于您和API消费者的需求。
是否使用其他内容编码作为base64?如果是,则可以指定数据的编码。
您是否提供了多种不同的文件类型?然后添加编码数据的内容类型是很有用的。请注意,编码内容的头可能已经包含有关文件内容类型的信息。
附言:最好提供你命名的“类型”,作为mime类型。这是一个更常见的定义内容类型的标准。

相关问题