确保与 Kafka Schema 和 OpenAPI 规范的一致性

Ensuring consistency with Kafka Schema and OpenAPI specification

许多 API/microservices 提供对包括 Kafka 主题在内的关键资源的访问。 API/microservice 消息使用定义 API/microservice 合同的 OpenAPI 规范进行验证。一旦微服务验证了消息,它就会发布到 Kafka 主题,此时消息将(再次)根据 Kafka 的模式注册表进行验证。

问题是有两个消息定义可以验证消息(OpenAPI 规范和 Kafka 的模式注册表),确保两个消息定义同步是一个挑战。

考虑到这一点,我有几个问题:

最后,以上哪项最有道理。还有其他更好的选择吗?

经过多次尝试解决这个问题后,我得出结论,有一种体系结构方法可以让 JSON 架构、OpenAPI 规范和架构注册表很好地协同工作(我有一个原型可以工作,但太复杂,无法在此处展示)。这是一般方法...

首先支持我的方法的一些事实:

  • 事实:OpenAPI (v3.1+) 是 JSON Schema 的超集;请求和响应定义 100% 符合 JSON Schema
  • 事实:Schema Registry 支持 JSON Schema; JSON 模式似乎是第一个 class 公民:它们可以存储和查询 in/by 模式注册表;并且库(虽然不容易找到)允许 JSON Schema 与 Kafka(消费者、生产者、KSQLDB for Confluent)及其连接器一起工作

这意味着 JSON Schema 需要成为定义流经的消息而不是 AVRO 的主要方式(我认为 Kafka 社区可能不会非常喜欢这一点)。但是通过使用 JSON Schema 允许 OpenAPI、Schema Registry 和 JSON Schema 一起玩得很好!

换句话说,通用解决方案将具有:

  • OpenAPI 成为定义 API 事件流解决方案中 front-ends 的主要方式
  • JSON 模式定义了 OpenAPI request/response 格式
  • OpenAPI 规范,使用适度的工具(有几个可用),OpenAPI 规范可以 assembled/bundled 来自 JSON Schema 部分,所以现在OpenAPI 和 JSONN Schemas 最终协调一致
  • 由于 API request/response 在事件管理系统中形成“事件”,并且定义独立于 OpenAPI 规范,JSON 模式现在定义事件
  • 最后,由于 JSON Schema 在 Schema Registry 中,所有事件都以 Kafka-friendly 方式定义并且可以任何正常的 Kafka 方式访问