Service Definition

Complete proto file showing all four gRPC patterns: unary, server streaming, client streaming, and bidirectional streaming.

syntax = "proto3";

package shortener;

option go_package = "shortener/pb";

message Link {
  int64 id = 1;
  string url = 2;
  string short_code = 3;
  int64 clicks = 4;
}

message CreateLinkRequest { string url = 1; }
message CreateLinkResponse { Link link = 1; }
message GetLinkRequest { string short_code = 1; }
message GetLinkResponse { Link link = 1; }
message DeleteLinkRequest { string short_code = 1; }
message DeleteLinkResponse {}
message ListLinksRequest {}
message BatchCreateLinksResponse {
  int64 created_count = 1;
  repeated Link links = 2;
}
message SyncRequest {
  string short_code = 1;
  int64 clicks = 2;
}
message SyncResponse {
  string short_code = 1;
  int64 total_clicks = 2;
  bool acknowledged = 3;
}

service LinkService {
  // Unary: one request, one response
  rpc CreateLink(CreateLinkRequest) returns (CreateLinkResponse);
  rpc GetLink(GetLinkRequest) returns (GetLinkResponse);
  rpc DeleteLink(DeleteLinkRequest) returns (DeleteLinkResponse);

  // Server streaming: one request, many responses
  rpc ListLinks(ListLinksRequest) returns (stream Link);

  // Client streaming: many requests, one response
  rpc BatchCreateLinks(stream CreateLinkRequest) returns (BatchCreateLinksResponse);

  // Bidirectional streaming: many requests, many responses
  rpc SyncClicks(stream SyncRequest) returns (stream SyncResponse);
}

💻 Run locally

Copy the code above and run it on your machine

© 2026 ByteLearn.dev. Free courses for developers. · Privacy