8 Haziran 2021 Salı

gRPC Protobuf Dosyası - Service Tanımlama

Giriş
Önce proto dosyaları hazırlanır. Daha sonra bu dosyalardan kod üretilir.

Üye alan tipi olarak int32, string, bool, bytes kullanılabilir. bytes byte[] anlamına gelir.

Örnek - Unary With Empty Return
Şöyle yaparız
rpc DeleteProduct(DeleteProductRequest) returns (google.protobuf.Empty);
Örnek - Unary
Şöyle yaparız
syntax = "proto3";

service SampleDataService {
  rpc GetSampleData (Empty) returns (SampleData) {}
}

message SampleData {
  int32 id = 1;
  string name = 2;
  bool enjoys_coding = 3;
}

message Empty {}
Örnek - Unary
Şöyle yaparız
syntax = "proto3"
option java_multiple_files = true;
option java_package = "com.grpc.hello";
option java_outer_classname = "HelloProto";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string name = 1;
}
Örnek - Tüm Kullanım Çeşitleri
Şöyle yaparız
syntax = "proto3";

package calculator;

option java_package = "com.vinsguru.calculator";
option java_multiple_files = true;

message Input {
  int32 number = 1;
}

message Output {
  int64 result = 1;
}

service CalculatorService {
  // unary
  rpc findFactorial(Input) returns (Output) {};
  // server stream
  rpc getAllFactors(Input) returns (stream Output) {};
  // client stream
  rpc sumAll(stream Input) returns (Output) {};
  // bi-directional stream
  rpc findPrime(stream Input) returns (stream Output) {};
}
Örnek - Unary + Bi-Directional Streaming
Şöyle yaparız
- generateRandomUser servisi unary'dir. 
- generateRandomUserStream servisi bi-directional'dır. Hem metod parametresinden hem de returns parametresinde stream kelimesi var.
syntax = "proto3";

package model;
import "google/protobuf/timestamp.proto";

option java_package = "com.userdetails.model";
option java_multiple_files = true;

message UserDetailsRequest {
  string firstName = 1;
  string lastName = 2;
  string city = 3;
}

message UserDetailsResponse {
  string id = 1;
  int32 numericId = 2;
  string firstName = 3;
  string lastName = 4;
  string city = 5;
}

service UserDetailsService {
  rpc generateRandomUser(UserDetailsRequest) returns (UserDetailsResponse) {};
  rpc generateRandomUserStream(stream UserDetailsRequest) returns
(stream UserDetailsResponse) {};
}

Hiç yorum yok:

Yorum Gönder