epocsquadron / gather-content-streaming-client
从GatherContent API获取大量数据集,无需内存过载。
Requires
- guzzlehttp/guzzle: ^6.3
- salsify/json-streaming-parser: ^8.0
This package is not auto-updated.
Last update: 2024-09-26 20:02:36 UTC
README
一个现代的GatherContent API客户端。它使用Guzzle的流式处理能力即时解析集合(“项目”、“项目”等),提供对大量数据集的操作能力。
特性
- 在流式处理过程中处理项目
- 限制/分页结果
- 异步支持
- 依赖性少(你很可能已经安装了Guzzle)
动机
GatherContent API在内部没有提供很多选项来过滤结果集。实际上,如果你想要获取内容项的列表,你将不得不请求一个描述项目中所有项目的详细结果的冗长结果集。甚至没有给你提供过滤响应模式以仅包含你想要的字段的能力(例如,如果正在为每个项目的详细信息调用做准备,则id)。这个库的诞生源于能够更有效地解析API响应并更好地控制返回的项目。
设计理念
我试图遵循许多流行框架用户熟悉的模式,特别是Laravel。对API的查询可以通过方法链构建约束,就像在框架中使用SQL查询构建器一样。一旦构建了条件,就需要调用一个实际执行查询的方法。这个简单的方法是get,直接类比上述查询构建器。然而,这会将流转换为内存表示,所以我们提供了一个each方法,它接受回调函数,可以在解析每个完整项目时应用,以及在可选的末尾。
在流上应用过滤并提供每项处理回调的组合允许在处理非常大的结果集时,内存占用基本保持不变。除此之外,我还试图让获取特定项目详细信息的方法返回比默认提供的原始响应更合理的响应模式。
项目状态
因为这个项目是为了从特定文件夹中提取项目而开发的,所以我并没有提供所有可能想要的所有过滤器类型,甚至没有为项目、文件夹或文件提供查询构建器。现有的接口应该足够好,可以概括所有这些端点,并且可以通过复制ItemsQueryBuilder::folder方法轻松添加过滤器。如果你需要这个流式处理能力,但它没有提供你需要的功能,我鼓励你提交一个拉取请求。
贡献
此项目接受拉取请求。请遵循PSR-2,如果你使用composer包,它应该是默认的,并尝试提供解释性注释。除此之外,我并不挑剔,不需要任何形式的贡献者协议。只需在Gitlab的develop分支上提交拉取请求。
许可证 & 版权
版权所有 2019 Daniel Poulin epocsquadron@protonmail.com
此库根据MPL v2许可证分发,其完整文本包含在此存储库中的LICENSE.md文件中。
本工作中有一个文件是从maxakawizard/JsonCollectionParser库修改而来,按照MIT许可证借用,并在文件注释中适当标注了归属。