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 TypeNotesC++ TypeJava TypePython Type[2]Go TypeRuby TypeC# TypePHP 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
posted @ 2021-04-09 14:32  Java9527  阅读(351)  评论(0编辑  收藏  举报