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)