【Prorobuf】一文学习protobuf语法

【Prorobuf】一文学习protobuf语法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
syntax = "proto3"; // 版本

// 文档:https://developers.google.com/protocol-buffers/docs/proto3

package foo.bar; // 

// 数据结构
message SearchRequest {

    // 数据类型 数据字段名称 = 数据编号。数据编号只能递增
    string query = 1;
    int32 page_number = 2;
    int32 per_page = 3;
}

message SearchData {
    int32 id = 1;
    // string name = 2; 被删除
    // int32 age = 3; 被删除

    // 常量的内嵌写法
    enum Sex {
        option allow_alias = true; // 将相同的值赋值给不同的常量,这个参数必须为true
        UNKNOWN = 0;
        MALE = 1;
        MAN = 1;
        FEMALE = 2;
        WOMAN = 2;
    }
    Sex sex = 4; // 注意,这里是序号,常量的默认值统一为0

    // 字典类型
    map<string, int> tags = 5;

    // 被删除的字段在兼容旧版本的情况下需标注保留
    reserved 3;
    reserved "name";
}

message SearchResponse {
    int32 ec = 1;
    string em = 2;

    // 内嵌数据结构 可用 SearchResponse.Page 引用
    message Page {
        int32 page = 1;
        int32 per_page = 2;
        int32 total_page = 3;
        int32 count = 4;
    }
    Page page = 4;


    // repeated 表示数组
    repeated SearchData data = 3;
}

// 总结:protobuf  json 数据类型对比 https://developers.google.com/protocol-buffers/docs/proto3#json

// 定义具体的RPC服务
service SearchService {
    rpc Search (SearchRequest) returns (SearchResponse);
}
Licensed under CC BY-NC-SA 4.0