Python restapi体系结构设计与实现
目前我正在设计和编程一个控制一系列设备的软件。该软件计划有一个REST接口,通过它您可以远程控制软件(和设备) 现在,架构的一个非常基本的抽象可以如下所示: 正如您所注意到的,该系统由一个主控制器组成,然后主控制器处理和监视彼此不依赖的不同模块。前端模块是图中的一个示例,而其他模块是模块的一般抽象,但它们可以是任何模块(数据库模块、MessageBus模块等)。 对于实际的REST接口,既有数据检索、数据存储,也有正在实现的控制命令 我的“问题”是,我无法决定这些“命令”应该如何传播下去。 可能的命令的某些情况:Python restapi体系结构设计与实现,python,multithreading,rest,design-patterns,restful-architecture,Python,Multithreading,Rest,Design Patterns,Restful Architecture,目前我正在设计和编程一个控制一系列设备的软件。该软件计划有一个REST接口,通过它您可以远程控制软件(和设备) 现在,架构的一个非常基本的抽象可以如下所示: 正如您所注意到的,该系统由一个主控制器组成,然后主控制器处理和监视彼此不依赖的不同模块。前端模块是图中的一个示例,而其他模块是模块的一般抽象,但它们可以是任何模块(数据库模块、MessageBus模块等)。 对于实际的REST接口,既有数据检索、数据存储,也有正在实现的控制命令 我的“问题”是,我无法决定这些“命令”应该如何传播下去。 可
- 请求打开/关闭、重新启动、控制由另一个模块处理的设备的命令
- 请求重新启动/重新加载软件的命令
- 从另一个模块检索数据的命令
- 所有接收到的REST命令都通过消息总线发送。在这种情况下,每个请求都应该接收一个唯一的标识符,然后可以使用该标识符检索请求的状态
- 所有接收到的REST命令都直接调用其他模块
如果您想知道,该软件是用Python编写的,但我认为这与这个问题无关。因此,基本上我们决定放弃RESTful方式,只使用套接字(特别是WebSocket)的方法 通过websockets发送的命令格式为JSON,在某种程度上类似于REST(基本上,请求包含一个“URI”、一个“Action”[get、put、post等]和一个“body”)
命令到达系统的前端控制部分,然后被推送到消息总线,系统的另一部分已经订阅了这些命令。在处理数据或执行命令后,数据通过消息总线返回,并通过websocket发送到客户端。IMO,您的上下文对于使用某些消息代理系统(如Apache Kafka()或RabbitMQ())来说是一个很好的上下文。这些模块可以以比简单的RESTAPI更健壮的方式生成/使用与主设备和通信设备之间的消息。(还建议用于处理多个设备,以及日志记录功能)。也许这不是你想要的,但值得研究。非常感谢。已经有这样一个系统用于模块之间的内部通信。由于RESTAPI将被用来进行一些操作员(前端用户)控制,因此如果我也使用消息总线进行REST,我会对任何可能的延迟问题保持警惕。此外,可能存在操作员需要立即反馈的情况,但对于消息总线系统,您需要进行另一次调用(或使用WebSocket)来检索请求的响应。这增加了时间和额外的资源使用。