Learn Rust Coding · Ders

Protobuf ve Hizmet Tanımları

API'nizi proto ile açıklayın.

1. ders / 413 adım

Protobuf ve Hizmet Tanımları, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.

gRPC ve Protobuf Neden Kullanılır?

gRPC, HTTP/2 ve Protocol Buffers üzerine kurulmuş yüksek performanslı bir RPC çatısıdır. Rust'ta tonic kasası gRPC'yi uçtan uca uygular.

Protobuf, arayüz tanımlama dilidir (IDL). İletileri ve hizmetleri bir kez .proto dosyasında tanımlarsınız; kod oluşturucular da güçlü tür denetimine sahip istemci ve sunucu kalıpları üretir.

.proto Dosyasının Yapısı

Her proto dosyası bir söz dizimi sürümü ve paket tanımlar. Paket, oluşturulan türleri ad alanlarına ayırır ve çakışmaları önler.

tonic için proto3 kullanın. Paket adı, oluşturma işleminden sonra bir Rust modül yoluna eşlenir.

syntax = "proto3";

package greeter.v1;

İleti Tanımlama

Bir ileti, türleri belirlenmiş bir kayıttır. Her alanın bir türü, adı ve kablo üzerinde kodlamada kullanılan benzersiz bir alan numarası vardır.

Alan numaraları sabit kalmalıdır: veri mevcut olduktan sonra bir alanı yeniden kullanmayın veya yeniden numaralandırmayın; aksi hâlde uyumluluğu bozarsınız.

message HelloRequest {
  string name = 1;
  int32 age = 2;
}

Skaler Türler ve Rust Eşlemesi

Protobuf skalerleri, prost aracılığıyla Rust türlerine eşlenir. string, String'e; int32, i32'ye; bool, bool'a ve bytes, Vec<u8>'e dönüşür.

proto3'te her skalerin bir varsayılanı vardır (boş dize, 0, false); işaretlenmedikçe isteğe bağlı değildirler.

message Metric {
  string label = 1;
  double value = 2;
  bool active = 3;
}

Hizmet Tanımlama

Bir service, RPC yöntemlerini gruplar. Her rpc, bir yöntem adı, istek iletisi ve yanıt iletisi tanımlar.

tonic bu bloktan bir sunucu özelliği ve istemci yapısı üretir. Davranışı sağlamanın yolu, bu özelliği uygulamaktır.

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloReply {
  string message = 1;
}

Dört RPC Yöntem Türü

gRPC dört akış biçimini destekler: tekli, sunucu akışlı, istemci akışlı ve çift yönlü akış.

Bir isteğin veya yanıtın ya da her ikisinin üzerinde stream anahtar sözcüğünü kullanarak akış belirtebilirsiniz.

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);
}

Protobuf'ta Sıralamalar

Sıralamalar tamsayılarla desteklenir. proto3'te ilk değer 0 olarak numaralandırılmalı ve varsayılan değer olarak işlev görmelidir.

prost, kablo üzerinden bilinmeyen değerler gelebileceği için bir Rust sıralaması ve temel i32 türünden dönüştürme yardımcıları oluşturur.

enum Status {
  STATUS_UNKNOWN = 0;
  STATUS_ACTIVE = 1;
  STATUS_BANNED = 2;
}

İç İçe ve Tekrarlanan Alanlar

repeated alanı bir listedir ve Rust'ta Vec<T> türüne eşlenir. İletiler iç içe yerleştirilebilir veya adlarıyla başvurulabilir.

Bu sayede ek bir uğraş gerektirmeden koleksiyonları ve bileşik yükleri modelleyebilirsiniz.

message Order {
  string id = 1;
  repeated Item items = 2;
}

message Item {
  string sku = 1;
  int32 qty = 2;
}

Empty ve İyi Bilinen Türler

Hiçbir şey almayan veya döndürmeyen yöntemler için google/protobuf/empty.proto dosyasını içe aktarın ve Empty kullanın.

Diğer iyi bilinen türler arasında Timestamp ve Duration bulunur. tonic bu tanımları içerdiğinden derlemenizde içe aktarabilirsiniz.

import "google/protobuf/empty.proto";

service Health {
  rpc Ping (google.protobuf.Empty) returns (google.protobuf.Empty);
}

Paketlerle Sürümleme

greeter.v1 örneğinde olduğu gibi pakete bir sürüm eklemek, API'yi güvenli biçimde geliştirmenizi sağlar. Geriye dönük uyumsuz bir değişiklik greeter.v2 içine alınırken v1 hizmet vermeye devam eder.

Bu kural, oluşturulan Rust modüllerini düzenli tutar: greeter::v1 ve greeter::v2 birlikte bulunabilir.

package greeter.v1;
// later, a parallel file:
// package greeter.v2;

Alan Uyumluluğu Kuralları

Yeni bir alanı yeni bir numarayla eklemek geriye dönük uyumludur; eski istemciler bu alanı yok sayar. Bir alanı kaldırmak, numarasını ve adını reserve ile ayırmadığınız sürece risklidir.

Ayırma işlemi, kullanım dışı bırakılmış bir alan numarasının yeniden kullanılmasını ve kod çözmenin bozulmasını önler.

message User {
  reserved 3, 5;
  reserved "legacy_token";
  string id = 1;
  string email = 2;
}

Kısa Kontrol

proto3 hizmet tanımlarını ne kadar anladığınızı sınayın.

Özet

proto3'te hizmetleri ve iletileri tanımladınız: kararlı alan numaraları, skaler türlerin Rust eşlemeleri, sıralamalar, tekrarlanan ve iç içe alanlar, dört RPC biçimi, iyi bilinen türler ve paketlerle sürümleme.

Sonraki adımda bu tanımları tonic-build ile Rust koduna dönüştüreceksiniz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Rust öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
39
Dersler
144

Sıkça Sorulan Sorular

“Protobuf ve Hizmet Tanımları” dersi ücretsiz mi?

Evet — “Protobuf ve Hizmet Tanımları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.

“Protobuf ve Hizmet Tanımları” dersinde ne öğreneceğim?

API'nizi proto ile açıklayın. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Protobuf ve Hizmet Tanımları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Protobuf ve Hizmet Tanımları
  2. tonic-build ile Kod Oluşturma
  3. gRPC Sunucusu Uygulama
  4. gRPC İstemcisinden Çağrı Yapma
← Learn Rust Coding Sayfasına Dön