Могу ли я составить прототипы gRPC для нескольких прототипов? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть определение gRPC API, подобное этому (из примера документов Akka), но гораздо длиннее (4000 строк, только часть service).

service GreeterService {
    rpc SayHello (HelloRequest) returns (HelloReply) {}

    rpc ItKeepsTalking (stream HelloRequest) returns (HelloReply) {}

    rpc ItKeepsReplying (HelloRequest) returns (stream HelloReply) {}

    rpc StreamHellos (stream HelloRequest) returns (stream HelloReply) {}
}

Однако список RPC теперь стал слишком длинными я хочу как-то «разбить его» на несколько файлов, чтобы этот файл был более читабельным.Примерно так:

// file 1:
service GreeterServicePartA {
    rpc SayHello (HelloRequest) returns (HelloReply) {}

    rpc ItKeepsTalking (stream HelloRequest) returns (HelloReply) {}
}

// file 2:
service GreeterServicePartB {
    rpc ItKeepsReplying (HelloRequest) returns (stream HelloReply) {}

    rpc StreamHellos (stream HelloRequest) returns (stream HelloReply) {}
}

// main proto file:
import "file1"
import "file2"
service GreeterService = GreeterServicePartA + GreeterServicePartB

Даже простое определение RPC отдельно в разных файлах, а затем запись чего-то подобного помогло бы мне:

service GreeterService {
    rpc SayHello = importedSayHello

    rpc ItKeepsTalking = importedKeepsTalking

    rpc ItKeepsReplying = importedKeepsReplying

    rpc StreamHellos = importedStreamHellos
}

Можно ли как-то "составить" службы вЧто такое прото-определения gRPC?

1 Ответ

0 голосов
/ 03 мая 2019

Вы не должны иметь такой большой сервис. Это звучит как свалка всех методов, если она выросла до 4000 строк. Я надеюсь, что большая часть этого - документация ... Обычно я ожидал бы намного больше сервисов, основанных на подмножествах более крупного API. Например, допустим, у меня есть MyAndroidAppService, который может стать свалкой. Но я мог бы спроектировать его как MyAndroidAppConfigService, MyAndroidAppNotificationService, MyAndroidAppChatService (предполагая очень сложное приложение с лотами методов).

Но поскольку у вас уже есть такая услуга, что вы можете с этим поделать? Вы не можете разделить определение service на несколько файлов. И если вы разделите определение сервиса на несколько новых сервисов, которые нарушат совместимость проводов gRPC.

Самое большее, что вы можете сделать, это переместить определения message в отдельный файл и затем использовать обычный механизм import . Поскольку перемещение сообщений в другой файл может привести к несовместимости API в сгенерированном коде, вместо этого можно использовать import public "path/to/messages.proto".

...