Protobuf
基本介绍
protoBuf下载地址:https://github.com/protocolbuffers/protobuf/releases
flask中基于protobuf实现api接口
环境搭建
# 安装格式转换工具,不同的操作系统,转换工具不同。windows->proto.exe,Linux->protobuf-compiler sudo apt install -y protobuf-compiler pip install flask # python下面用于对protobuf进行编码解码的模块 pip install protobuf # 网络请求工具库 pip install requests
接口代码
编写Protobuf数据数据,Protobuf_Message.proto
,代码:
syntax = "proto3"; // 响应体 message Response { int32 returncode = 1; message data { string username = 1; string email = 2; int32 age = 3; } repeated data dataList = 2; string message = 3; } // 请求体 message Request { string data = 1; int32 page = 2; int32 pageSize = 3; }
编译转换成python格式
protoc --python_out=./ Protobuf_Message.proto
服务端接口,server.py
,代码:
from Protobuf_Message_pb2 import Request, Response from flask import Flask, request app=Flask(__name__) @app.route("/api/demo", methods=["POST"]) def demo(): # 解析请求 request_data = Request() request_data.ParseFromString(request.get_data()) print("data",request_data.data) # data user print("page",request_data.page) # page 1 print("pageSize",request_data.pageSize) # pageSize 10 # 编写响应信息 response = Response() response.returncode = 200 response.message = "Success" data_list = [ {"username":"小明", "age": 18, "email":"xiaoming@mofang.com"}, {"username":"小白", "age": 18, "email":"xiaobai@mofang.com"}, ] for data in data_list: item = response.data() item.username=data["username"] item.age=data["age"] item.email=data["email"] response.dataList.append(item) return response.SerializeToString(), 200 if __name__ == '__main__': app.run("127.0.0.1", port=5000)
客户端,client.py
,代码:
from Protobuf_Message_pb2 import Request, Response import requests def test_protobuf_api(): """ 测试 接口 :return: """ request_data = Request() # 编写请求信息 request_data.data = "user" request_data.page = 1 request_data.pageSize = 10 req_data = request_data.SerializeToString()# 序列化 response = requests.post("http://127.0.0.1:5000/api/demo", data=req_data) # 获取响应内容 res = Response() res.ParseFromString(response.content) # 反序列化 print(res.returncode) # 200 print(res.message) # 成功 for data in res.dataList: print(f"username:{data.username}, age:{data.age}, email: {data.email}") # username:小明, age:18, email=xiaoming@mofang.com # username:小白, age:18, email=xiaobai@mofang.com if __name__ == '__main__': test_protobuf_api()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)