即使在调试之后,我也有点迷失在定义、生成的代码和许多有点像黑匣子的东西之间。
但让我们从头开始。我有一个使用 NestJS 作为框架的节点编写的 API。NestJS 自动创建 swagger/openapi json 文件。我使用 swagger-codegen 创建了一个 PHP 类来从另一台服务器访问 API。就像简单 API 请求的魅力一样。
现在的问题是 API 请求返回更大的响应,即来自一个或多个 DB 的 >1000 行。不要让客户端等待很长时间,并在我已切换到 NDJSON 的服务器上创建一个大的 JSON 响应,它将响应拆分为较小的 JSON 部分,每个部分都在它自己的行上。当我使用 curl 或使用 fopen 和 fread 在 PHP 中使用 HTTP 包装器手动创建我的请求时,这也适用。响应类型为 application/x-ndjson。
但是 swagger-codegen 生成的代码总是等到收到整个响应。更糟糕的是,因为它无法使用 json_decode() 解码 NDJSON 并且只返回 null。下面使用 Guzzle,它使用 PSR7 流作为响应。
现在我可以跳过 NDJSON 端点的自动生成代码。但我不希望添加特殊处理并丢失所有有用的生成检查。
那么是否有可能让 swagger-codegen 访问响应流?我是否缺少 codegen 的参数或招摇 JSON 中的某些内容?它确实有一个带有 application/x-ndjson 的产品。