使用 *attr* DTO 为我们的 API 提供支持( 五 )


cattrs 的使用是 API 系统内部的 。我们有一个特定的 APIConverter 类,其中注册了一些默认挂钩,还有一个注册表,其他团队可以在其中帮助处理特定的罕见边缘情况 。默认钩子的用途不仅仅是提供各种转换 。在某些情况下,此处注册的挂钩可以充当特定类型的全局验证器 。例如,日期和日期时间类型可以接受各种格式,并且此转换器负责验证这些格式(而不是每个 DTO 都必须验证它),并在出现问题时引发验证错误 。
总的来说,我们对cattrs有一个普通的用法,并且事实证明它是有效的 。
结论我所描述的摘要:
我们的 API 使用 DTO 表示请求正文、查询参数和响应 。
我们包装了 attrs 来简化和标准化开发人员的使用 。
我们采用装饰器和元类等 Python 模式来大规模简化实现、对 API 进行版本控制,并将 DTO 绑定到端点版本 。
用 cattrs 补充 attrs 简化了 DTO 的序列化和反序列化 。
我们对 2022 年初做出的决定感到满意 。与每个端点直接接受和生成 JSON 或字典相比,我们基于 DTO 的方法有助于实现上面提到的愿景:

“Klaviyo 值得拥有一个长期、一致且灵活的 API,它可以在未来几年为 Klaviyo 内部和外部的开发人员提供服务,同时最大限度地减少我们内部开发人员的运营开销,并最大限度地提高我们外部开发人员的一致性和可用性 。”

【使用 *attr* DTO 为我们的 API 提供支持】


推荐阅读