首页 > 解决方案 > Python中gRPC协议数据序列化和反序列化的标准方法

问题描述

Python中gRPC传输的序列化和反序列化数据是否有任何标准方法?类似于用于 gRPC 的 Django REST 框架?

我们将数据存储在 MongoDB 中,我们需要以某种有效的方式验证来自 gRPC 的输入。并且还巧妙地序列化数据以进行相反方向的传输。

标签: pythonserializationdeserializationgrpcgrpc-python

解决方案


在我们的项目中,我们使用的是一种幼稚的方法。只是一个可序列化为字典的简单数据类。此类中的字段与 gRPC proto 文件中的消息实体名称匹配。

import dataclasses

@dataclasses.dataclass()
class gRPC_Mapping_Entity(object):
    # These fields are matching to proto file:
    some_field_a: str
    some_field_b: str

    # To make object serializable to dictionary
    def keys(self) -> list[str]:
        return [_var for _var in vars(self)
                if not _var.startswith("_")]

    def __getitem__(self, key):
        return getattr(self, key)

# Somewhere on server side:
# ...
grpc_map = gRPC_Mapping_Entity(...)
# 'project_pb2' is automatically generated by gRPC
#   'Entity' is a message in the 'project' service
project_pb2.Entity(**dict(grpc_map))

但是可能有更好的方法来处理它。


推荐阅读