过去,大多数 Web 工程师会很快否定 API 端点的想法,即流式输出无限数量的行,他们认为应尽快处理 HTTP 请求!处理请求所花费的时间超过几秒钟都是一个危险信号,现在应该重新考虑某些事情。
Web 堆栈中的几乎所有内容都针对快速处理小请求进行了优化。但在过去的十年中,潮流有所转变:Node.js 使异步 Web 服务器变得司空见惯,WebSockets 教会我们处理长时间运行的连接,并且在 Python 世界中,asyncio 和ASGI为使用较少量处理长时间运行的请求提供了坚实的基础RAM 和 CPU。
我已经在这个领域进行了几年的试验。
- Datasette有能力使用ASGI诡计到从表中传输所有的行(或经过滤的表)作为CSV,潜在地返回数百个数据的MB的。
- Django SQL Dashboard可以将 SQL 查询的完整结果导出为 CSV 或 TSV,这次使用 Django 的StreamingHttpResponse(它确实会占用一个完整的工作进程,但如果您将其限制为受控数量的经过身份验证的用户,那也没关系)。
- VIAL实现流式响应以提供“从管理员导出”功能。它还有一个受 API 密钥保护的搜索 API,可以输出JSON 或 GeoJSON 中的所有匹配行。
点击标题