Events 如何在事件中使用OpenAPI/Swagger规范?

Events 如何在事件中使用OpenAPI/Swagger规范?,events,swagger,microservices,event-driven,Events,Swagger,Microservices,Event Driven,用于记录和运行针对HTTP API的自动化测试 规范是否也支持事件驱动的微服务体系结构,在这种体系结构中,记录在不同服务之间传递的事件负载非常重要,即使这些服务没有通过HTTP路径访问 由于我所看到的一切都是通过HTTP路径基于API的,我想知道Swagger如何处理这个问题?如果您有强类型事件,您可以使用反射来发布事件的结构,这对于您的微服务的客户端来说应该足够了 如果有一些事件描述符(xml或类似的)用于从事件存储/事件日志中重新生成事件,则可以发布这些事件 否则,除了事件,我不知道有任何工

用于记录和运行针对HTTP API的自动化测试

规范是否也支持事件驱动的微服务体系结构,在这种体系结构中,记录在不同服务之间传递的事件负载非常重要,即使这些服务没有通过HTTP路径访问


由于我所看到的一切都是通过HTTP路径基于API的,我想知道Swagger如何处理这个问题?

如果您有强类型事件,您可以使用反射来发布事件的结构,这对于您的微服务的客户端来说应该足够了

如果有一些事件描述符(xml或类似的)用于从事件存储/事件日志中重新生成事件,则可以发布这些事件


否则,除了事件,我不知道有任何工具可以像Swagger一样工作。

我认为您可以在Swagger中定义,即使它们没有被任何端点使用。只需在专用部分声明您需要的任何类型,例如“定义”。您可以将在端点中使用的引用为,例如,
“$ref”:“#/definitions/User”


我希望会为它们生成代码,这样您就可以针对任何定义编写测试。

如果您使用的是Java,那么还有另一种选择。我从未对此进行过测试,但这个想法可以指导您为其他平台找到解决方案

您可以使用“good”和oldJavadoc以及来自的Swagger模块,如下所述:

您可以使用Enouncate从Javadoc生成swagger ui,它有一个swagger模块


它只是一个maven插件。最后,从JavaDocs中获取的服务的完整HTML文档支持通过顶级
webhooks
属性的事件。对于处理OAS 3.0及更低版本的工具,OpenAPI规范只能支持定义模式,因此对于在事件驱动系统中定义事件非常有用。这样的定义也可以被OpenAPI生成器等codegen工具用来为Java、Swift、Go等语言自动创建模式对象

OpenAPI 3.1 OpenAPI规范3.1在此处定义了webhook支持:

  • 等级库定义:
  • 规范示例:

异步API 是事件驱动体系结构的规范。它与协议无关,因此可以与Kafka、Websocket、MQTT、AMQP和基于消息传递的任何其他工具一起使用


OpenAPI/Swagger 2.0 对于Swagger Spec 2.0(又名OpenAPI Spec 2.0),您可以在Swagger Spec中包含alamar提到的定义。Swagger Codegen将自动为这些定义创建模型类,即使它们不与任何路径关联。我构建并维护了一个包含如下事件的Swagger Spec/Codegen。您可以在下面的文件夹中看到自动生成的Class/structs Swagger Codegen构建,过滤以
\u event.go
结尾的20个文件。这些是当前使用创建的

  • 生成的文件:
  • Codegen信息:
如果您有多个事件类型,那么拥有一个可以区分您正在接收的消息类型的事件属性可以帮助将其解析为正确的事件类/结构。在Go中,可以两次解组数据,一次解组到泛型结构中以查看事件类型属性,然后第二次解组实际事件类型

我还在中维护示例事件和解析代码的集合,供您参考。您可以在此处看到示例事件和(手动)语言定义:

  • 示例:
  • 定义:

另一种选择可能是模式属性或指向有效负载中模式的链接。