Погружаюсь в тему protocol buffers и для закрепления материала решил написать свой кодогенератор (слоёв транспорта и модели) для простых .proto файлов. Во всех руководствах приводят примеры описания с одним сервисов, или вообще без него - только с месседжами. Меня же интересует, можно ли в одном .proto файле определять несколько сервисов, например так:
spoiler
syntax = "proto3";
package blogpost.proto.api;
option go_package = "*/ms/blogpost;api";
service PostService {
rpc CreatePost(CreatePostRequest) returns (CreatePostResponse);
rpc GetPost(GetPostRequest) returns (GetPostResponse);
rpc UpdatePost(UpdatePostRequest) returns (UpdatePostResponse);
rpc DeletePost(DeletePostRequest) returns (DeletePostResponse);
}
message Post {
***
}
message CreatePostRequest {
***
}
message CreatePostResponse {
***
}
message GetPostRequest {
***
}
message GetPostResponse {
Post post = 1;
repeated Comment comments = 2;
}
***
service CommentService {
rpc CreateComment(CreateCommentRequest) returns (CreateCommentResponse);
rpc GetComment(GetCommentRequest) returns (Comment);
rpc UpdateComment(UpdateCommentRequest) returns (UpdateCommentResponse);
rpc DeleteComment(DeleteCommentRequest) returns (DeleteCommentResponse);
}
message CreateCommentRequest {
***
}
message CreateCommentResponse {
***
}
message GetCommentRequest {
uint32 commentID = 1;
}
message Comment {
***
}
***
То есть технически-то можно, и *pb.go и *grpc_pb.go у меня из этого proto сгенерировались, но вопрос в другом - распространена ли эта практика? Сталкивался ли кто-нибудь с таким в разработке? Не является ли этот подход deprecated?