google protobuf 文件书写格式
syntax = "proto3"; //代码生成包名 package com.xxx.xxx.xxx.grpc; import "google/protobuf/wrappers.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; option java_multiple_files = false; //要生成的最外层Java类的类名 option java_outer_classname = "SmsRecordProto"; //定义服务 service SmsRecordService{ //service 方法名调用message 返回smsrecord //新增 rpc add(CreateRequest) returns(CreateResponse){}; //根据手机号,类型,平台 筛选最新 rpc details(DetailsRequest) returns(DetailsResponse){}; } //根据手机和类型查询根据id获取最新验证码信息 message DetailsRequest { string phone = 1; string type = 2; string platform = 3; } message DetailsResponse{ SmsRecord smsRecord = 1; } //根据id查询 message SelectByPrimaryKeyRequest{ int64 id = 1; } message SelectByPrimaryKeyResponse{ SmsRecord smsrecord = 1; } //新增 message CreateRequest{ string phone = 1; string type = 2; string platform = 3; } message CreateResponse{ CodeEnum codeEnum =1; } //信息表实体 message SmsRecord{ int64 id = 1;//id string phone = 2;//手机号 //登录验证码类型:LOGIN_CODE;重置密码类型 :RESETPWD_CODE;换绑手机验证码类型:EXCHANGEPHONE_CODE;忘记密码类型:FORGETPWD_CODE;校验原手机号:VALIDPHONE_CODE string type = 3; string templateCode = 4;//'模板code' google.protobuf.Timestamp createdAt = 5;//'创建时间' string platform = 6;//'平台:商户:GALATEA,中台:MINERVA;用户:ALBUS_AUTH string verificationCode = 7;//验证码 } enum CodeEnum{ SUCCESS = 0;//成功 FAILED = 1;//失败 请求阿里服务失败 PARAMETERERROR = 2;//参数错误 EXCEED = 3;//超出次数 SYSERROR = 4;//系统异常,阿里返回的错误码,比如:欠费停机之类的 REPEAT = 5;//60秒内重复发送 }
- 文件的第一行指定了你正在使用proto3语法:如果你没有指定这个,编译器会使用proto2。这个指定语法行必须是文件的非空非注释的第一个行。
- DetailsRequest消息格式有3个字段,在消息中承载的数据分别对应于每一个字段。其中每个字段都有一个名字和一种类型。
- 向.proto文件添加注释,可以使用C/C++/Java风格的双斜杠(//) 语法格式
- 枚举的第一个常量映射为0:每个枚举类型必须将其第一个类型映射为0,
- 必须有有一个0值,我们可以用这个0值作为默认值。
- 这个零值必须为第一个元素,为了兼容proto2语义,枚举类的第一个值总是默认值。
一个标量消息字段可以含有一个如下的类型——该表格展示了定义于.proto文件中的类型,以及与之对应的、在自动生成的访问类中定义的类型
.proto Type | Notes | C++ Type | Java Type | Python Type[2] | Go Type | Ruby Type | C# Type | PHP Type |
---|---|---|---|---|---|---|---|---|
double | double | double | float | float64 | Float | double | float | |
float | float | float | float | float32 | Float | float | float | |
int32 | 使用变长编码,对于负值的效率很低,如果你的域有可能有负值,请使用sint64替代 | int32 | int | int | int32 | Fixnum 或者 Bignum(根据需要) | int | integer |
uint32 | 使用变长编码 | uint32 | int | int/long | uint32 | Fixnum 或者 Bignum(根据需要) | uint | integer |
uint64 | 使用变长编码 | uint64 | long | int/long | uint64 | Bignum | ulong | integer/string |
sint32 | 使用变长编码,这些编码在负值时比int32高效的多 | int32 | int | int | int32 | Fixnum 或者 Bignum(根据需要) | int | integer |
sint64 | 使用变长编码,有符号的整型值。编码时比通常的int64高效。 | int64 | long | int/long | int64 | Bignum | long | integer/string |
fixed32 | 总是4个字节,如果数值总是比总是比228大的话,这个类型会比uint32高效。 | uint32 | int | int | uint32 | Fixnum 或者 Bignum(根据需要) | uint | integer |
fixed64 | 总是8个字节,如果数值总是比总是比256大的话,这个类型会比uint64高效。 | uint64 | long | int/long | uint64 | Bignum | ulong | integer/string |
sfixed32 | 总是4个字节 | int32 | int | int | int32 | Fixnum 或者 Bignum(根据需要) | int | integer |
sfixed64 | 总是8个字节 | int64 | long | int/long | int64 | Bignum | long | integer/string |
bool | bool | boolean | bool | bool | TrueClass/FalseClass | bool | boolean | |
string | 一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本。 | string | String | str/unicode | string | String (UTF-8) | string | string |
bytes | 可能包含任意顺序的字节数据。 | string | ByteString | str | []byte | String (ASCII-8BIT) | ByteString | string |