在 PHP Serving multipart/form-data 文件中创建 JSON API

Posted

技术标签:

【中文标题】在 PHP Serving multipart/form-data 文件中创建 JSON API【英文标题】:Create a JSON API in PHP Serving multipart/form-data File 【发布时间】:2021-06-23 23:25:22 【问题描述】:

我想创建一个发送 JSON 文件(而不是字符串)的 Streaming php API。

以下是给定的:

我们有一个现有的 PHP REST API,它提供 application/json MIME 类型的 JSON 数据。但是,JSON 数据有时会超过 6-10 MB,具体取决于查询。 另一个应用程序将从 PHP REST API 的端点发出请求,但应收到一个 JSON 文件以自动充当多部分流。

我应该如何在 PHP 中构建我的 HTTP 标头、JSON 内容等,以将 JSON 作为文件而不是字符串来提供,从而使其成为流式服务器?

【问题讨论】:

服务还是接受?为什么要使用只有 10MB 的 multipart? AWS API Gateway 有接收和发送 6-10MB 有效负载的限制。 JSON 字符串可以更大。 将某些内容编码为多部分不会改变有效负载大小。 【参考方案1】:

我创建了一个为multipart/form-data 提供服务的虚拟服务器,前端将文件下载为字符串,并以file.php 作为文件名。

<?php
header('Content-Type: multipart/form-data');
echo file_get_contents('file.json'); // 49 MB file

在前端收集multipart/form-data后,它应该将JSON字符串收集为流并将其转换为JSON对象,如下所示:

const jsonData: string[] = []

// Stream and parse the data inside JSON
const stream = streamableResponse.nodeStream()

// Collect all json string
stream.on('data', (chunk) => 
  jsonData.push(chunk)
)

// Handle error of JSON stream
stream.on('error', (error) => 
  logger.error(`An error occured when getting the file contents for $fileName`)
  logger.error(error)
)

// Wait for the stream to finish
stream.on('end', async () => 
   const data = JSON.parse(jsonData)
   console.log(data) // Process object data

上面的代码将首先将 HTTP 响应收集为字符串,然后再将其转换为已解析的 javascript 代码。

【讨论】:

这绝对是错误。 Multipart 是一种不同的数据编码方式。如果你告诉客户它将是multipart/form-data,然后返回 json 你基本上是在撒谎。 也许它适合您的用例并且可以解决一些问题,但它绝对不正确。 @Evert 是的...这取决于用例。有些人在从服务器收集数据时会执行多个分页请求。在这种情况下,它只发送一个 HTTP 下载请求。 你所做的仍然没有意义。这不会产生任何不同的东西,除了您只是设置了错误的内容类型标头(这可能会破坏某些客户端)。如果将 content-type 设置为application/json,则没有区别。 edit 好的,很奇怪!这确实使您的应用程序在技术上做一些无效的事情,但如果它可以规避 AWS 限制,我猜它可以工作!

以上是关于在 PHP Serving multipart/form-data 文件中创建 JSON API的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow serving 中 No module named tensorflow_serving.apis,找不到predict_pb2问题

学习笔记tensorflow-serving模型部署

为 TensorFlow Serving 保存模型

如何编译Fate-Serving

TensorFlow Serving - 有状态的 LSTM

tensorflow serving目录解读