接口案例与代码生成

1 接口案例

test.proto

syntax = "proto3";

message Work {
    int32 num1 = 1;
    int32 num2 = 2;
    enum Operation {
        ADD = 0;
        SUBTRACT = 1;
        MULTIPLY = 2;
        DIVIDE = 3;
    };
    Operation op = 3;
}

message Result {
    int32 val = 1;
}

message City {
    string name = 1;
}

message Subject {
    string name = 1;
}

message Delta {
    int32 val = 1;
}

message Sum {
    int32 val = 1;
}

message Number {
    int32 val = 1;
}

message Answer {
    int32 val = 1;
    string desc = 2;
}

service Demo {
    // unary rpc
    rpc Calculate(Work) returns (Result) {}

    // server streaming rpc
    // 客户端发送城市名字,服务端多次返回该城市包含的学科
    rpc GetCitySubjects(City) returns (stream Subject) {}

    // client streaming rpc
    // 客户端多次发送累加值,服务端返回最终的累计和
    rpc Accumulate(stream Delta) returns (Sum) {}

    // bidirectional streaming rpc
    // 客户端多次发送猜的数字,对于猜中的数字,服务端返回,否则不返回
    rpc GuessNumber(stream Number) returns (stream Answer) {}
}

2 代码生成

安装protobuf编译器和grpc库
pip install grpcio-tools
编译生成代码
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. test.proto
  • -I表示搜索proto文件中被导入文件的目录
  • --python_out表示保存生成Python文件的目录,生成的文件中包含接口定义中的数据类型
  • --grpc_python_out表示保存生成Python文件的目录,生成的文件中包含接口定义中的服务类型

你可能感兴趣的:(接口案例与代码生成)