gRPC框架学习:3、proto样式规范
本文档提供了.proto文件的样式指南。通过遵循这些约定,您将使协议缓冲区消息定义及其相应的类保持一致并易于阅读。
请注意,协议缓冲区样式已经随着时间而发展,因此您可能会看到.proto以不同约定或样式编写的文件。修改这些文件时,请尊重现有样式。一致性是关键。但是,在创建新.proto文件时,最好采用当前的最佳样式。
1. 标准文件格式
- 保持行长为80个字符。
- 缩进2个空格。
- 最好对字符串使用双引号。
2. 档案结构
文件应命名 lower_snake_case.proto
所有文件应按以下方式订购:
- License header (if applicable)
- File overview
- Syntax
- Package
- Imports (sorted)
- File options
- Everything else
3. Packages
程序包名称应为小写,并且应与目录层次结构相对应。例如,如果文件在其中my/package/
,则软件包名称应为my.package
。
4. 消息和字段名称
使用CamelCase(使用大写字母)作为消息名称-例如,SongServerRequest
。使用underscore_separated_names作为字段名(包括字段名和扩展名之一),例如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
5. 重复的字段
对重复的字段使用复数名称。
repeated string keys = 1;
...
repeated MyMessage accounts = 17;
6. 枚举
使用CamelCase(以大写字母开头)作为枚举类型名称,并使用CAPITALS_WITH_UNDERSCORES作为值名称:
enum FooBar {
FOO_BAR_UNSPECIFIED = 0;
FOO_BAR_FIRST_VALUE = 1;
FOO_BAR_SECOND_VALUE = 2;
}
每个枚举值都应以分号(而不是逗号)结尾。优先为枚举值添加前缀,而不是将其包含在封闭消息中。零值枚举应具有后缀UNSPECIFIED
。
7. 服务
如果您.proto
定义了RPC服务,则应使用CamelCase(以大写字母开头)作为服务名称和任何RPC方法名称:
service FooService {
rpc GetSomething(FooRequest) returns (FooResponse);
}
8. 避免的事情
- 必填字段(仅适用于proto2)
- 组(仅适用于proto2)