【发布时间】:2019-05-09 15:11:26
【问题描述】:
假设我有以下两个模式,我将消息发送到 websocketstream 并接收包含类似数据的消息。
# First Schema
x_sent = {"Product": {"id": "123"}}
x_received = {"properties": {
"id": {"type": "number"},
"color": "green"}}
# Second Schema
y_sent = {"Item": {"Product": {"uid": "123"}}}
y_received = {"configs": {
"id_number": "123",
"type": "int"},
"colour": "green"}
如果我想区分两个流,我可以过滤消息内容:
if msg == "properties":
use_schema_a()
if msg == "configs":
use_schema_b()
但是,如果不同模式的数量增加,这并不是很干燥。我也可以这样做:
msg_routing = {"properties": use_schema_a,
"configs": use_schema_b}
if msg:
msg_routing[msg]()
但是我仍然会为每个模式创建函数!我觉得我错过了一些东西(概念上)。我很想创建一个通用类来处理消息的发送和接收,并且只在一种配置文件中包含特定于流的过滤数据。
它可能看起来像这样:
{"schemaA": {"name": "service_ABC", "color": "properties.color", "send_id":"Product:id"},
"schemaB": {"name": "service_DEF", "color": "configs.colour", "send_id":"Item:Product:uid"}}
就像上面的例子一样,我需要的数据是一样的(在这个例子中是green)。我需要发送以获取该数据的ID 也类似(在此示例中为123)。
如果我知道我需要发送和接收的数据的架构,我如何动态构建理解该架构的东西?
给你一个清晰的起点示例:
def on_message(received_msg):
# The unparsed message we receive is something like
# {"properties": {
# "id": {"type": "number"},
# "color": "green"}}
# Do our message filtering/parsing
handle_message_contents(service_name, color)
【问题讨论】:
-
你收到了什么?它看起来不像一个模式。为什么他们如此不同?如果您可以将响应消息标准化,那就更好了。
标签: python json python-3.x oop