Dasar-Dasar gRPC & Protobuf
Definisikan kontrak layanan dalam file .proto, buat kode C# dengan Grpc.Tools, dan pahami transportasi gRPC.
Dasar-Dasar gRPC & Protobuf adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Apa Itu gRPC?
gRPC adalah kerangka kerja RPC berperforma tinggi dan tidak bergantung pada bahasa yang dikembangkan oleh Google. gRPC menggunakan HTTP/2 untuk transportasi dan Protocol Buffers (Protobuf) sebagai format serialisasi—jauh lebih cepat dan ringkas daripada JSON melalui HTTP/1.1.
Protocol Buffers: IDL
Anda menentukan kontrak layanan dalam berkas .proto. IDL Protobuf (Bahasa Definisi Antarmuka) memiliki tipe kuat dan netral terhadap bahasa—berkas yang sama menghasilkan kode klien/peladen dalam C#, Go, Python, dan sebagainya.
// greet.proto
syntax = "proto3";
option csharp_namespace = "GrpcService";
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}Menyiapkan Server gRPC di .NET
Buat proyek gRPC dengan dotnet new grpc. Tambahkan berkas .proto ke proyek, lalu Grpc.Tools akan secara otomatis menghasilkan kelas C# pada waktu pembangunan.
// .csproj snippet
<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>
// Program.cs
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.Run();Mengimplementasikan Layanan gRPC
Turunkan kelas dasar yang dihasilkan dan ganti implementasi metode RPC. Kerangka kerja menangani serialisasi, pembingkaian HTTP/2, dan perutean secara otomatis.
using Grpc.Core;
using GrpcService;
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger) => _logger = logger;
public override Task<HelloReply> SayHello(
HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = $"Hello, {request.Name}!"
});
}
}Membuat Klien gRPC
Kompilator Protobuf juga menghasilkan kelas klien dengan tipe kuat. Gunakan GrpcChannel untuk terhubung dan memanggil layanan seolah-olah layanan tersebut merupakan metode lokal.
// Client project: add Grpc.Net.Client package
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "Alice" });
Console.WriteLine(reply.Message); // Hello, Alice!Tipe Protobuf dan Nomor Bidang
Setiap bidang dalam pesan Protobuf memiliki nomor bidang unik (1–536870911). Nomor bidang dikodekan dalam format biner—jangan pernah mengubahnya setelah diterapkan karena akan merusak kompatibilitas mundur.
message Product {
int32 id = 1;
string name = 2;
double price = 3;
int32 stock = 4;
bool is_active = 5;
repeated string tags = 6; // array
}
// Supported scalar types:
// int32, int64, uint32, uint64, float, double
// bool, string, bytes, enumEnumerasi dan Pesan Bertingkat
Protobuf mendukung enumerasi dan tipe pesan bertingkat. Gunakan keduanya untuk memodelkan objek domain kompleks dalam kontrak layanan Anda.
enum OrderStatus {
ORDER_STATUS_UNSPECIFIED = 0;
ORDER_STATUS_PENDING = 1;
ORDER_STATUS_SHIPPED = 2;
ORDER_STATUS_CANCELLED = 3;
}
message Order {
int32 id = 1;
OrderStatus status = 2;
repeated OrderLine lines = 3;
}
message OrderLine {
int32 product_id = 1;
int32 quantity = 2;
double price = 3;
}Transportasi HTTP/2 dan gRPC
gRPC menggunakan HTTP/2 yang mendukung multiplexing—beberapa panggilan RPC serentak melalui satu koneksi TCP—sehingga mengurangi latensi dan overhead koneksi dibandingkan HTTP/1.1.
// gRPC requires HTTP/2
// For local dev with HTTP (not HTTPS), enable HTTP/2 cleartext:
builder.WebHost.ConfigureKestrel(opt =>
opt.ListenLocalhost(5000, o => o.Protocols = HttpProtocols.Http2));
// Client for cleartext (dev only)
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
using var channel = GrpcChannel.ForAddress("http://localhost:5000");Penanganan Galat dengan StatusCode
gRPC menggunakan kode statusnya sendiri, yang berbeda dari HTTP. Lempar RpcException dengan Status untuk mengirim respons galat bertipe kepada klien.
public override Task<ProductReply> GetProduct(
ProductRequest request,
ServerCallContext context)
{
var product = _repo.FindById(request.Id);
if (product is null)
throw new RpcException(
new Status(StatusCode.NotFound, $"Product {request.Id} not found"));
return Task.FromResult(MapToReply(product));
}Refleksi gRPC untuk Pengembangan
Aktifkan refleksi gRPC agar alat seperti grpcurl dan Postman dapat menemukan layanan Anda tanpa mengakses berkas .proto secara langsung.
// dotnet add package Grpc.AspNetCore.Server.Reflection
builder.Services.AddGrpcReflection();
if (app.Environment.IsDevelopment())
app.MapGrpcReflectionService();
// Now use grpcurl:
// grpcurl -plaintext localhost:5000 list
// grpcurl -plaintext localhost:5000 greet.Greeter/SayHelloContoh Dunia Nyata: Pencarian Produk Layanan Mikro
Layanan produk yang menyediakan titik akhir gRPC dan digunakan secara internal oleh layanan pesanan—pola klasik komunikasi antarlayanan.
// product.proto
service ProductService {
rpc GetProduct (GetProductRequest) returns (ProductResponse);
rpc ListProducts (ListProductsRequest) returns (ListProductsResponse);
}
// Order service calls it:
public class OrderService
{
private readonly ProductService.ProductServiceClient _products;
public OrderService(ProductService.ProductServiceClient p) => _products = p;
public async Task<Order> PlaceOrderAsync(int productId, int qty)
{
var product = await _products.GetProductAsync(
new GetProductRequest { Id = productId });
return new Order { ProductName = product.Name, Quantity = qty };
}
}Pemeriksaan Singkat
Mengapa Anda tidak boleh mengubah nomor bidang Protobuf yang sudah ada setelah penerapan?
Ringkasan: Dasar-Dasar gRPC & Protobuf
Hal-hal penting:
- gRPC menggunakan HTTP/2 + Protobuf untuk komunikasi antarlayanan yang cepat dan memiliki tipe kuat
- Tentukan kontrak layanan dalam berkas
.proto—kode dihasilkan pada waktu pembangunan - Nomor bidang merupakan pengodean pada format kabel—jangan pernah mengubah atau menggunakannya kembali
- Turunkan kelas dasar yang dihasilkan dan ganti implementasi metode RPC
- Gunakan RpcException dengan StatusCode untuk respons galat bertipe
- Aktifkan refleksi gRPC untuk mendukung alat pengembangan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar gRPC & Protobuf” gratis?
Ya — teks lengkap “Dasar-Dasar gRPC & Protobuf” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar gRPC & Protobuf”?
Definisikan kontrak layanan dalam file .proto, buat kode C# dengan Grpc.Tools, dan pahami transportasi gRPC. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Dasar-Dasar gRPC & Protobuf” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar gRPC & Protobuf
- RPC Unary & Streaming Server
- Streaming Klien & Dua Arah
- Batas Waktu, Pembatalan & Interceptor