#json #web-apps #extractor #sql-database #config-file

rustract

A Rust library for safely extracting JSON fields while also checking data bounds

1 个不稳定版本

0.1.0 2021年12月17日

#44 in #extractor

MIT 许可协议

67KB
1.5K SLoC

rustract

A Rust library for safely extracting JSON fields while also checking data bounds.

安装

[dependencies]
rustract = "0.1.0"

初始化

从使用的数据库中获取 SQL 模式(它应包含表创建 SQL)。或者,可以将示例数据库设计输出复制并修改用于较小项目。在这种情况下,配置文件必须使用 db_path 字段指向此数据库设计副本。

创建一个包含 schema_path 字段的配置文件(JSON),该字段是模式的路径。可选地,使用 type_path 字段设置 TypeScript 文件放置的路径。

最后,可以使用库的函数手动加载数据库设计,或者使用 init(config_path) 函数进行初始化。

用法

每个数据库设计都有由字段设计组成的表设计。从 JSON 数据中提取和测试数据的主要方法是使用 FieldDesign 结构体的 extract(json) 函数。这将从提供的 JSON 对象中提取一个值。

如果从 JSON 数据中提取整个表,则 TableDesign 结构体还有一个 extract(json) 方法。此方法调用每个包含字段的 extract(json) 方法。

每个字段的所需条件主要从模式中读取,但输出 DatabaseDesign 文件应 始终 手动检查和编辑以确保准确性。特别是,通常需要手动添加每个字段的正则表达式和大小要求。

对于某些库,如 Warp,DatabaseDesign 结构体必须是静态的。建议使用 lazy_static 库来完成此操作。

方法

这个库允许快速将数据与数据库的限制进行校验,以确保不遗漏任何必填字段,所有数据均在数据库的字节和长度限制内,并且所有数据都符合期望的格式。该库还生成了前端使用的 TypeScript 类型,以便保持后端请求数据的一致性。通过数据提取过程和前端类型,确保了Web应用在边缘情况下的行为安全。

这个库的一个清晰示例是在数据库中使用ISO日期。格式为YYYY-MM-DD的ISO日期可能适合数据库存储,但使用ISO字符串输出的JavaScript日期将在末尾包含时间,通常格式为YYYY-MM-DDT00:00:00。虽然为前端代码添加确保日期遵循此格式的代码可能会有所帮助,但使用API或类似Postman的应用程序的用户可能输入数据库可以接受的有效数据。

为了解决这个问题,后端也需要边界检查代码,这可能会迅速变得难以管理。相反,在JSON提取过程中使用大小限制和正则表达式检查可以大大简化所有相关代码。它还在数据库字段中创建了一致性。

依赖项

~2.8–4.5MB
~88K SLoC