本片文章主要介绍 protobuf 的编码风格,这些都是 google 官方推荐的 proto 文件编码风格,遵循这些风格编写 proto 风格,可以使团队的 ProtoBuf 消息定义和风格保持一致,有利于阅读和维护。
protobuf 的风格可能会随着不同版本变化,有可能会看到 .proto 文件以不同的风格编写,但是最好采用当前的最佳风格,请参考官方 Protobuf Style Guide。
文件的标准格式
- 每行的长度保持在 80 个字符以内。
- 使用 2 个空格缩进。(注:这里实际使用 4 个空格比较多)
- 对字符串使用双引号。
文件的结构
文件的命名格式为:lower_snake_case.proto。也就是每个单词都小写,并用下划线连接单词。
所有的 proto 文件应该以以下方式排序:
- License header(如果允许)
- File overview
- Syntax
- Package
- Imports (有序)
- File options
- Everything else
包名
包名应使用小写字母,并应与目录层次对应。例如,一个文件在 my/package/ 中,那么包名就应该为 my.package。
消息和字段名
消息名称采用 CamelCase 命名规范,也就是大驼峰命名法,首字母有大写,例如 SongServerRequest。
对于字段名,需要采用小写单词和下划线连接的命名方式,例如 song_name。
message SongServerRequest {
optional string song_name = 1;
}
对于字段名使用这种命名规范,可以得到的字段访问函数格式如下:
C++:
const string& song_name() { ... }
void set_song_name(const string& x) { ... }
Java:
public String getSongName() { ... }
public Builder setSongName(String v) { ... }
如果你的名字字段包含数字,数字应该出现在字母后面,而不是下划线后面。例如,使用 song_name1 而不是使用 song_name_1。
repeated字段
在 repeated 字段名称需要使用复数形式,也就是在名称后面加上 s,比如:
repeated string keys = 1;
//...
repeated MyMessage accounts = 17;
枚举
枚举类型名和消息名一样,采用 CamelCase 命名规范,也就是大驼峰命名法。而枚举值采用 CAPITALS_WITH_UNDERSCORES,也就是所有单子大写并用下划线连接的命名方式:
enum FooBar {
FOO_BAR_UNSPECIFIED = 0;
FOO_BAR_FIRST_VALUE = 1;
FOO_BAR_SECOND_VALUE = 2;
}
每个枚举值,都应该以分号结尾,而不是逗号,这和 C++ 不同。每个枚举值都应该加上前缀 FOO_BAR,零值枚举命名应该有后缀 UNSPECIFIED。
Service
如果你为 .proto 定义了一个 RPC 服务,你应该对服务名称和任何 RPC 方法名称都是用 CamelCase 命名规范,也就是大驼峰命名法,例如:
service FooService {
rpc GetSomething(FooRequest) returns (FooResponse);
}