Definisi Protobuf dan Layanan
Jelaskan API Anda dalam proto.
Definisi Protobuf dan Layanan adalah pelajaran Learn Rust Coding 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 Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Mengapa gRPC dan Protobuf
gRPC adalah kerangka kerja RPC berperforma tinggi yang dibangun di atas HTTP/2 dan Protocol Buffers. Di Rust, crate tonic mengimplementasikan gRPC dari awal hingga akhir.
Protobuf adalah bahasa definisi antarmuka (IDL). Anda mendeskripsikan pesan dan layanan satu kali dalam berkas .proto, lalu pembuat kode menghasilkan stub klien dan server yang bertipe kuat.
Anatomi Berkas .proto
Setiap berkas proto mendeklarasikan versi sintaks dan paket. Paket memberi ruang nama pada tipe yang dihasilkan dan mencegah benturan.
Gunakan proto3 untuk tonic. Nama paket dipetakan menjadi jalur modul Rust setelah pembuatan kode.
syntax = "proto3";
package greeter.v1;Mendefinisikan Pesan
Pesan adalah rekaman bertipe. Setiap bidang memiliki tipe, nama, dan nomor bidang unik yang digunakan untuk penyandian kawat.
Nomor bidang harus stabil: jangan pernah menggunakan kembali atau mengubah nomor bidang setelah data tersedia, karena hal itu merusak kompatibilitas.
message HelloRequest {
string name = 1;
int32 age = 2;
}Tipe Skalar dan Pemetaan Rust
Tipe skalar Protobuf dipetakan ke tipe Rust melalui prost. string menjadi String, int32 menjadi i32, bool menjadi bool, dan bytes menjadi Vec<u8>.
Dalam proto3, setiap skalar memiliki nilai bawaan (string kosong, 0, false); skalar tidak bersifat opsional kecuali ditandai.
message Metric {
string label = 1;
double value = 2;
bool active = 3;
}Mendefinisikan Layanan
Sebuah service mengelompokkan metode RPC. Setiap rpc mendeklarasikan nama metode, pesan permintaan, dan pesan tanggapan.
tonic menghasilkan trait server dan struct klien dari blok ini. Mengimplementasikan trait tersebut adalah cara Anda menyediakan perilaku.
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloReply {
string message = 1;
}Empat Jenis Metode RPC
gRPC mendukung empat bentuk streaming: unary, streaming server, streaming klien, dan streaming dua arah.
Anda menandai stream dengan kata kunci stream pada sisi permintaan atau tanggapan, atau pada keduanya.
service Chat {
rpc Unary (Msg) returns (Msg);
rpc ServerStream (Msg) returns (stream Msg);
rpc ClientStream (stream Msg) returns (Msg);
rpc BiDi (stream Msg) returns (stream Msg);
}Enum dalam Protobuf
Enum didukung oleh bilangan bulat. Dalam proto3, nilai pertama harus diberi nomor 0 dan berfungsi sebagai nilai bawaan.
prost menghasilkan enum Rust beserta pembantu untuk mengonversinya dari i32 yang mendasarinya, karena nilai yang tidak dikenal dapat datang melalui kawat.
enum Status {
STATUS_UNKNOWN = 0;
STATUS_ACTIVE = 1;
STATUS_BANNED = 2;
}Bidang Bertingkat dan Berulang
Bidang repeated adalah daftar dan dipetakan menjadi Vec<T> di Rust. Pesan dapat disarangkan atau dirujuk berdasarkan nama.
Dengan begitu, Anda dapat memodelkan koleksi dan muatan gabungan tanpa kerumitan tambahan.
message Order {
string id = 1;
repeated Item items = 2;
}
message Item {
string sku = 1;
int32 qty = 2;
}Tipe Empty dan yang Dikenal Luas
Untuk metode yang tidak menerima atau mengembalikan apa pun, impor google/protobuf/empty.proto dan gunakan Empty.
Tipe lain yang dikenal luas mencakup Timestamp dan Duration. tonic menyediakan definisi tersebut sehingga Anda dapat mengimpornya dalam build Anda.
import "google/protobuf/empty.proto";
service Health {
rpc Ping (google.protobuf.Empty) returns (google.protobuf.Empty);
}Pemberian Versi dengan Paket
Menempatkan versi dalam paket, seperti greeter.v1, memungkinkan Anda mengembangkan API dengan aman. Perubahan yang merusak kompatibilitas dimasukkan ke greeter.v2, sementara v1 tetap melayani.
Konvensi ini menjaga modul Rust yang dihasilkan tetap rapi: greeter::v1 dan greeter::v2 dapat berdampingan.
package greeter.v1;
// later, a parallel file:
// package greeter.v2;Aturan Kompatibilitas Bidang
Menambahkan bidang baru dengan nomor baru bersifat kompatibel mundur; klien lama akan mengabaikannya. Menghapus bidang berisiko, kecuali Anda reserve nomor dan namanya.
Pencadangan ini mencegah siapa pun menggunakan kembali nomor bidang yang sudah dihentikan dan merusak dekode.
message User {
reserved 3, 5;
reserved "legacy_token";
string id = 1;
string email = 2;
}Pemeriksaan Singkat
Uji pemahaman Anda tentang definisi layanan proto3.
Rangkuman
Anda telah mendefinisikan layanan dan pesan dalam proto3: nomor bidang yang stabil, pemetaan skalar ke Rust, enum, bidang berulang dan bertingkat, empat bentuk RPC, tipe yang dikenal luas, serta pemberian versi melalui paket.
Selanjutnya Anda akan mengubah definisi ini menjadi kode Rust dengan tonic-build.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Definisi Protobuf dan Layanan” gratis?
Ya — teks lengkap “Definisi Protobuf dan Layanan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Definisi Protobuf dan Layanan”?
Jelaskan API Anda dalam proto. Kamu berlatih Learn Rust Coding 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 Learn Rust Coding?
Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding 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 “Definisi Protobuf dan Layanan” 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 Learn Rust Coding ini?
Ya. Setiap pelajaran Learn Rust Coding 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
- Definisi Protobuf dan Layanan
- Membuat Kode dengan tonic-build
- Mengimplementasikan Server gRPC
- Memanggil dari Klien gRPC