Leer programmeren met Rust · Les

Protobuf- en servicedefinities

Beschrijf uw API in proto.

Les 1 van 413 stappen

Protobuf- en servicedefinities is een gratis Leer programmeren met Rust-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Leer programmeren met Rust. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Leer programmeren met Rust bevat in totaal 4 lessen.

Waarom gRPC en Protobuf

gRPC is een RPC-framework met hoge prestaties, gebouwd op HTTP/2 en Protocol Buffers. In Rust implementeert de crate tonic gRPC van begin tot eind.

Protobuf is de taal voor interfacedefinities (IDL). Je beschrijft berichten en services één keer in een .proto-bestand, waarna codegeneratoren sterk getypeerde client- en serverstubs maken.

Opbouw van een .proto-bestand

Elk proto-bestand declareert een syntaxisversie en een pakket. Het pakket geeft gegenereerde types een namespace en voorkomt naamconflicten.

Gebruik proto3 voor tonic. De pakketnaam wordt na het genereren omgezet in een pad naar een Rust-module.

syntax = "proto3";

package greeter.v1;

Berichten definiëren

Een bericht is een getypeerd record. Elk veld heeft een type, een naam en een uniek veldnummer dat voor codering op de draad wordt gebruikt.

Veldnummers moeten stabiel blijven: hergebruik of vernummer een veld nooit zodra er gegevens bestaan, anders verbreek je de compatibiliteit.

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

Scalaire types en hun Rust-koppeling

Protobuf-scalars worden via prost gekoppeld aan Rust-types. string wordt String, int32 wordt i32, bool wordt bool en bytes wordt Vec<u8>.

In proto3 heeft elke scalar een standaardwaarde (lege tekenreeks, 0, false); ze zijn niet optioneel tenzij je dat aangeeft.

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

Een service definiëren

Een service groepeert RPC-methoden. Elke rpc declareert een methodenaam, een aanvraagbericht en een antwoordbericht.

tonic genereert uit dit blok een servertrait en een clientstruct. Door de trait te implementeren, lever je het gedrag aan.

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

message HelloReply {
  string message = 1;
}

Vier soorten RPC-methoden

gRPC ondersteunt vier vormen van streaming: unair, streaming vanaf de server, streaming vanaf de client en bidirectionele streaming.

Je geeft een stream aan met het sleutelwoord stream aan de kant van de aanvraag, de respons of beide.

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

Enumeraties in Protobuf

Enumeraties zijn gebaseerd op gehele getallen. In proto3 moet de eerste waarde het nummer 0 hebben en fungeert die als standaardwaarde.

prost genereert een Rust-enumeratie plus hulpfuncties om vanuit de onderliggende i32 te converteren, omdat onbekende waarden via de draad kunnen binnenkomen.

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

Geneste en herhaalde velden

Een repeated-veld is een lijst en wordt in Rust gekoppeld aan Vec<T>. Berichten kunnen genest zijn of op naam worden verwezen.

Zo kun je verzamelingen en samengestelde ladingen modelleren zonder extra omslachtigheid.

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

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

Het lege type en bekende types

Voor methoden die niets ontvangen of retourneren, importeer je google/protobuf/empty.proto en gebruik je Empty.

Andere bekende types zijn Timestamp en Duration. tonic levert deze definities mee, zodat je ze in je build kunt importeren.

import "google/protobuf/empty.proto";

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

Versiebeheer met pakketten

Door een versie in het pakket op te nemen, zoals greeter.v1, kun je een API veilig verder ontwikkelen. Een incompatibele wijziging komt in greeter.v2, terwijl v1 actief blijft.

Deze conventie houdt de gegenereerde Rust-modules overzichtelijk: greeter::v1 en greeter::v2 bestaan naast elkaar.

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

Regels voor veldcompatibiliteit

Een nieuw veld met een nieuw nummer toevoegen is achterwaarts compatibel; oude clients negeren het. Een veld verwijderen is riskant, tenzij je het nummer en de naam ervan reserveert.

Reserveren voorkomt dat iemand een ingetrokken veldnummer opnieuw gebruikt en de decodering beschadigt.

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

Korte controle

Test je begrip van proto3-service-definities.

Samenvatting

Je hebt services en berichten gedefinieerd in proto3: stabiele veldnummers, koppelingen van scalars naar Rust-types, enumeraties, herhaalde en geneste velden, de vier RPC-vormen, bekende types en versiebeheer via pakketten.

Vervolgens zet je deze definities met tonic-build om in Rust-code.

Gratis beginnen

Leer Rust met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
39
Lessen
144

Veelgestelde vragen

Is de les “Protobuf- en servicedefinities” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Leer programmeren met Rust, waaronder “Protobuf- en servicedefinities”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Leer programmeren met Rust bevat in totaal 4 lessen.

Wat leer ik in “Protobuf- en servicedefinities”?

Beschrijf uw API in proto. Je oefent met Leer programmeren met Rust door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Leer programmeren met Rust te beginnen?

Ervaring vooraf is niet nodig. Leer programmeren met Rust op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Protobuf- en servicedefinities”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Leer programmeren met Rust?

Ja. Elke les over Leer programmeren met Rust bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Protobuf- en servicedefinities
  2. Code genereren met tonic-build
  3. Een gRPC-server implementeren
  4. Bellen vanuit een gRPC-client
← Terug naar Leer programmeren met Rust