每支API都要写文件的日子, 你还记得吗?
API文件是让别人了解系统提供哪些功能的媒介, 文件要写的清楚明了真的要花上不少时间, 有时候写API文件所花的时间还比coding时间久, 使用了Protobuf之後, proto
档案就是我的文件, Input格式、Output格式、每个参数的资料型别都可以清楚的写在proto
上面, 一旦有异动也只要更新spec就可以知道新的接口跟型别, 不需要来回修改文件、Client端也不用再来确认格式等等的, 重要的是不用担心图文不符会被追杀
Protobuf指的是Protocol Buffers, 它是由Google 开发的一种数据交换格式, 写好资料结构的spec之後就可以透过工具protoc-gen-go依照使用的语言编译成对应的档案, 我使用的是proto3。
syntax = "proto3";
option go_package = "./;coconut";
package coconut;
service Coconut {
rpc Ping(PingRequest) returns (Pong){}
}
message PingRequest {}
message Pong {
string pong = 1;
}
syntax = "proto3";
option go_package = "coconut/pb;coconut";
package coconut;
service Coconut {
rpc Ping(PingRequest) returns (Pong){}
// 更新统计点数
rpc UpdatePoints(PointsRequest) returns (RetPoints){}
// 取得点数统计状况
rpc GetPoints(GetPointsRequest) returns (RetPoints){}
}
message PingRequest {}
message Pong {
string pong = 1;
}
// 更新统计点数参数
message PointsRequest {
string level_1 = 1; // 第一层, 最上层代号
string level_2 = 2; // 第二层代号
string level_3 = 3; // 第三层代号
string user_name = 4; // 操作员代号
int32 point = 5; // 施作点数
}
message PointInfo {
string name = 1; // 层级名称
int32 points = 2; // 点数
}
message RetPoints {
repeated PointInfo data = 1; // 回传当前资料
}
message GetPointsRequest {
string level_1 = 1; // 第一层, 最上层代号
string level_2 = 2; // 第二层代号
string level_3 = 3; // 第三层代号
}
这边要注意的是:message 的参数一开了之後,如果要删除,需要通知有使用spec的服务一起更新才行, 因为spec如果判断到型别不相同或是参数取不到就会无法使用, 实务上会来使用spec的系统可能有5~10个, 如果随便删除或改变资料型别会需要很多系统一起更新, 但有可能遇到每个系统更新时程不同的问题, 後来采用的方式就是弃用前面的参数, 持续在後面加上新的, 这样急迫需要使用到新参数的人再更新spec就好。
protoc -I/usr/local/include -I. -I/Users/evelyn_chen/Dev/workspaces/src coconut.proto --go_out=plugins=grpc:.
查看 pb.go内容可以看到protobuff文件已被成功编译为程序了
接下来要在专案中引用spec就可以进行开发了。
<<: Day 14:RecyclerView 进阶项目布局
>>: Day06 Kibana - Discover Search
来到了第 30 篇!(๑´ㅂ`๑) 虽然还有很多页面没有讲,但其实有应用到的技术都讲得差不多了 来分...
又到了一年一度的铁人赛啦~?!今年决定尝试用C与OpenGL写出一个2D平台卷轴游戏,希望至少一可以...
电子助教:「这个标题...我闻到了停刊的味道... (́⊙◞౪◟⊙‵)」 这个章节开始我们要建立「数...
中秋月圆人团圆 烤肉越吃脸越圆 中秋节快乐 / 我想吃烤肉 前一章提到了环境的安装或自行编译与设定g...
最近实在是有点折磨,刚把民航局的案子吿一个段落,最近接到一个大案子,每天要腾个一小时来处理;晚上 I...