Protocol Buffers 协议 .proto 文件的编写指南及注意事项

Protocol Buffers(简称protobuf)是Google提供的一种数据序列化协议(轻便高效)

编写 .proto 文件是定义 gRPC 服务和消息结构等的关键步骤。以下是详细指南,包括编写 .proto 文件的基本语法和注意事项。

1. 基本语法

一个 .proto 文件通常包括以下部分:

  1. 语法声明:指定使用的 Protocol Buffers 语法版本。
  2. 包声明:定义包名,用于避免命名冲突。
  3. 消息类型:定义请求和响应的消息结构。
  4. 服务定义:定义 gRPC 服务及其方法。

2. 基本结构

以下是一个简单的 .proto 文件结构:

syntax = "proto3"; // 使用 Protocol Buffers 语法版本 3

package example; // 定义包名

// 定义请求消息类型
message HelloRequest {
  string name = 1; // 字段类型 字段名 = 字段编号;
}

// 定义响应消息类型
message HelloResponse {
  string message = 1;
}

// 定义 gRPC 服务
service Greeter {
  rpc SayHello (HelloRequest) returns (HelloResponse); // 方法名 (请求消息类型) 返回 (响应消息类型)
}

3. 字段类型

.proto 文件支持多种基本类型和复杂类型:

  • 基本类型
    • double: 双精度浮点数
    • float: 单精度浮点数
    • int32: 32 位整数
    • int64: 64 位整数
    • uint32: 无符号 32 位整数
    • uint64: 无符号 64 位整数
    • sint32: 有符号 32 位整数
    • sint64: 有符号 64 位整数
    • fixed32: 固定长度 32 位整数
    • fixed64: 固定长度 64 位整数
    • sfixed32: 有符号固定长度 32 位整数
    • sfixed64: 有符号固定长度 64 位整数
    • bool: 布尔值
    • string: 字符串
    • bytes: 字节序列
  • 复杂类型
    • message: 消息类型,用于嵌套结构
    • enum: 枚举类型

4. 字段编号

字段编号用于唯一标识消息中的字段,取值范围是 1 到 2^29-1。避免使用 19000-19999 的编号,因为这些编号在 Protocol Buffers 中被保留用于未来扩展。

5. 示例

以下是一个更复杂的示例,包含嵌套消息和枚举类型:

syntax = "proto3";

package example;

// 嵌套消息类型
message Address {
  string street = 1;
  string city = 2;
  string state = 3;
  string zip = 4;
}

// 枚举类型
enum PhoneType {
  MOBILE = 0;
  HOME = 1;
  WORK = 2;
}

// 嵌套消息类型
message PhoneNumber {
  string number = 1;
  PhoneType type = 2;
}

// 定义联系人消息类型
message Contact {
  string name = 1;
  Address address = 2;
  repeated PhoneNumber phones = 3; // repeated 表示数组或列表
}

// 定义请求消息类型
message GetContactRequest {
  string id = 1;
}

// 定义响应消息类型
message GetContactResponse {
  Contact contact = 1;
}

// 定义 gRPC 服务
service ContactService {
  rpc GetContact (GetContactRequest) returns (GetContactResponse);
}

6. 注意事项

  1. 字段编号:确保每个字段有唯一的编号,并避免使用保留编号。
  2. 可选和重复字段:默认情况下,字段是可选的。使用 repeated 关键字定义数组或列表。
  3. 命名规范:使用驼峰命名法(camelCase)命名字段,使用帕斯卡命名法(PascalCase)命名消息类型和服务名。
  4. 保持兼容性:如果需要对 .proto 文件进行修改,尽量保持向后兼容。不要修改或删除已有的字段编号,可以添加新的字段编号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GD32F303红枫派使用手册】第二十九节 USB-IAP升级实验

29.1 实验内容 通过本实验主要学习以下内容: USB IAP升级操作 29.2 实验原理 USB IAP升级本例程中使用的是Custom HID中的IAP设备类,其设备类协议的实现与HID的类似,主要包括GET_REPORT/GET_IDLE/GET_PROTOCOL/SET_REPORT/SET_IDLE/SET_P…

VirtualBox 虚拟机的网络通过宿主机的网络进行冲浪

虚拟机与宿主机通过桥接模式处在同一个网络中 1.说明2.操作步骤2.1.虚拟机设置网络2.2.手动指定虚拟机的IP 1.说明 A.虚拟机 ubuntu-20.04 B.宿主机网络 Wireless LAN adapter WLAN:Connection-specific DNS Suffix . : lanIPv4 Address. . . . . . . . . . . : 192.168.111…

电源管理芯片PMIC的安全策略

1.概述 PMIC作为系统的电源管理模块,其输入电压一般会比较高,为保证芯片自身的安全,PMIC芯片会有独立的安全域,和功能域完全隔离,拥有独立的电压和电流输入,独立的晶振模块,内部运行监控状态机…

谷粒商城笔记-02-项目整体效果展示

这是整个项目的第2集。 主要内容是: 演示了谷粒商城的后台管理系统 演示了商城系统 项目第一阶段[分布式基础篇]的主要内容及这个阶段完成后能达到的技能水平项目第一阶段[分布式高级篇]的主要内容及这个阶段完成后能达到的技能水平项目第一阶段[高可用集群篇]的主…

专利优先权是什么

专利优先权:定义、分类与重要性 在专利的世界中,专利优先权是一个至关重要的概念。它不仅是专利申请人权益的保障,更是确保创新成果得到及时和充分保护的重要工具。 一、专利优先权的定义 专利优先权是指专利申请人就其发明创造第一次在某…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

从关键新闻和最新技术看AI行业发展(2024.6.17-6.30第二十六期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky的公众号&…

万界星空科技QMS系统:重塑质量管理新纪元

万界星空科技QMS(Quality Management System)质量管理系统是一套全面、高效的质量管理工具,旨在帮助企业提升产品质量、优化生产流程、降低质量成本。该系统具备多个具体功能模块,以下是对其主要功能模块的详细介绍: 一…

数据泄露时代的安全之道:访问认证的重要性

引言 想象一下:你一觉醒来,收到一条通知——你的公司遭遇了数据泄露。你感到恐惧,因为这意味着客户数据被曝光,公司声誉受损,还有巨额罚款在等着你。在当今的数字化环境中,这种情况太常见了。全球各地的组…

Android sdk 安装已经环境配置

🍎个人博客:个人主页 🏆个人专栏:Android ⛳️ 功不唐捐,玉汝于成 目录 正文 一、下载 二、安装 三、环境配置 我的其他博客 正文 一、下载 1、大家可去官网下载 因为需要魔法 所以就不展示了 2、去下面这…

【启明智显分享】启明智显2.8寸COF触摸串口屏:一体黑设计与塑料框架相结合

在我们不断追求智能化、科技化生活的年代,越来越多的高科技产品为我们的日常生活带来了无与伦比的便利。智能屏已经成为智能化进程中的重要组成部分,其设计的美观性、便携性、耐用性都成为产品选型的重要依据。 启明智显近期推出了一款基于乐鑫ESP32-S3R…

城镇居民社区再生资源回收系统-计算机毕业设计源码04175

摘 要 本论文介绍了一个基于SSM(Spring Spring MVC MyBatis)技术的城镇居民社区再生资源回收系统的设计与实现。随着社会对环境保护意识的不断提高,再生资源回收成为了一种重要的环保行动。然而,传统的再生资源回收方式存在着信…

ELISA实验前,需要做好哪些准备?

进行ELISA试剂盒实验前,需要进行周密的准备工作以确保实验的顺利进行和实验的准确性。那么,具体应该做哪些准备呢?欣博盛生物为您总结了一些关键的准备工作步骤: 1. 阅读说明书 仔细阅读ELISA试剂盒的说明书,了解试剂…

Day03-Jenkins与集成案例

Day03-Jenkins与集成案例 6. CD持续交付,持续部署实现方案7. 案例04: basketball案例,搭建开发测试专用的任务7.1 任务要求7.2 步骤7.3 详细步骤1)安装插件2)创建任务 7.4 gitlab配置钩子1) 解除钩子局域网访问限制2) gitlab配置钩子 7.5 与部…

IDEA开发必备的插件,实测非常好用

1、Lombok -- 简化Java代码开发 推荐指数: ★★★★★ Lombok:首当其冲的非常推荐的当然是Lombok Lombok能以简单的注解形式来简化Java代码,提高开发人员的开发效率。例如开发中经常需要写的JavaBean,都需要花时间去添加相应的ge…

实战大数据:分布式大数据分析处理系统的开发与应用

💂 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

linux服务器安全级别提升配置修改

linux服务器安全级别提升配置修改 说明修改登录密码策略步骤 设置用户密码定期更新登录失败次数锁定步骤 锁定系统重要文件文件说明锁定文件解锁文件 防火墙设置firewalld防火墙查看防火墙状态开启防火墙关闭防火墙重新加载防火墙配置添加端口移除端口添加IP到白名单移除白名单…

JAVA 实现拍卖框架及拍卖详情流程介绍(包含代码示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

Java项目:基于SSM框架实现的网上医院预约挂号系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的网上医院预约挂号系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…