Python 用protobuf对flask API来进行序列化和反序列化

复制代码
import flask
import json

server=flask.Flask("abc")
@server.route("/user/list",methods=["get"])
def user_list():
    json_dict={
    "code": 0,
    "msg": "操作成功",
    "data": {
        "id": 8877,
        "create_time": "2023-12-01 22:08:57",
        "update_time": "2023-12-01 22:08:57",
        "phone": "1550000000",
        "email": "3332@qq.com",
        "nick": "wuhh",
        "roles": [],
        "head_url": "http://test/api/default.jpg"
     }
    }
    return json.dumps(json_dict)
server.run(debug=True,port=8888)
复制代码

 

复制代码
syntax="proto3";

package user_proto;

message UserData {
int32 id=1;
string create_time = 2;
string update_time = 3;
string phone = 4;
string email = 5;
string nick = 6;
repeated string roles = 7;
string head_url = 8;
}

message UserResponse {
    int32 code = 1;
    string msg = 2;
    UserData data = 3;
}
复制代码
复制代码
protoc --python_out=. user.proto
from
flask import Flask, Response import json import user_pb2 server=Flask("abc") @server.route("/user/list",methods=["get"]) def user_list(): json_dict={ "code": 0, "msg": "操作成功", "data": { "id": 8877, "create_time": "2023-12-01 22:08:57", "update_time": "2023-12-01 22:08:57", "phone": "1550000000", "email": "3332@qq.com", "nick": "wuhh", "roles": [], "head_url": "http://test/api/default.jpg" } } # 创建 protobuf 消息实例并填充数据 user_data=user_pb2.UserData() user_data.id=8877 user_data.create_time="2023-12-01 22:08:57" user_data.update_time="2023-12-01 22:08:57" user_data.phone="1550000000" user_data.email="3332@qq.com" user_data.nick="wuhh" role_list=[12,34] user_data.roles.append(str(role_list)) user_data.head_url="http://test/api/default.jpg" response=user_pb2.UserResponse() response.code=0 response.msg = "操作成功"; response.data.CopyFrom(user_data); # 序列化protobuf消息为字节串 serialized_response=response.SerializeToString() # 创建一个Flask响应,设置内容类型和正文 return Response(serialized_response,mimetype='application/octet-stream') server.run(debug=True,port=8888)
复制代码
复制代码
import requests
import user_pb2
from google.protobuf.json_format import MessageToJson
req=requests.request(method="get",url="http://127.0.0.1:8888/user/list",headers={"Content-Type":"application/octet-stream"})
protobuf_data =req.content # 从接口接收到的 protobuf 序列化数据
# print(protobuf_data)
def deserialize_protobuf_data(protobuf_data):
# protobuf_data 是从某个接口接收到的 protobuf 序列化后的字节串
message = user_pb2.UserResponse() # 替换为你在 .proto 文件中定义的消息类型
message.ParseFromString(protobuf_data) # 从字节串中反序列化数据
return message
person = deserialize_protobuf_data(protobuf_data)
json_data=MessageToJson(person)
print(json_data)
复制代码

 

posted @   萱娃  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示