Echolot
Anfragen

gRPC

gRPC-Services aufrufen, die durch eine .proto-Datei oder die Reflection des Servers beschrieben sind, mit Nachrichten als JSON geschrieben und angezeigt.

Eine gRPC-Anfrage ruft eine Methode eines Services auf. Du schreibst die Nachricht als JSON; Echolot codiert sie mit der Beschreibung des Services, sendet sie über HTTP/2 und zeigt die Antwort als JSON mit dem Status des Aufrufs.

Inventory › Reserve stock: der Tab „Nachricht“ mit inventory.proto, dem Service Inventory und der Methode Reserve, unary, der JSON-Nachricht und der Antwort mit Status OK und einer Nachricht

Mit Alpenglow ausprobieren

Die Anfragen im Ordner Inventory rufen einen gRPC-Server auf localhost:50051 auf. Er liegt im Ordner examples/servers des Docs-Repositorys (bun run grpc).

gRPC-Anfrage erstellen

Wähle Datei › Neue gRPC-Anfrage oder Neue gRPC-Anfrage im Menü + neben Anfragen in der Seitenleiste. Die Adresse ist der Server, etwa http://localhost:50051 (in Alpenglow {{grpcURL}}), ohne Pfad.

Der Editor hat diese Tabs: Doku, Nachricht, Header, Auth, Variablen, Tests, Skripte und Einstellungen. Die Header sind die Metadaten des Aufrufs. gRPC-Aufrufe sind immer POST, daher zeigt das Badge gRPC statt einer Methode.

Den Service beschreiben

Der Tab Nachricht beginnt damit, wo die Services beschrieben sind:

  • Eine .proto-Datei im Ordner specs/ des Arbeitsbereichs, etwa specs/inventory.proto. Ihre Importe werden neben ihr gelesen, und die Well-Known-Typen von google.protobuf brauchen keine Datei. .proto-Dateien fügst du auf der Seite „Specs“ hinzu und bearbeitest sie dort: siehe Proto-Dateien.
  • Server-Reflection: Echolot fragt den Server nach seinen Services. Der Server muss den Reflection-Service anbieten. Der Reflection-Aufruf geht mit den Headern, der Auth und den Variablen der Anfrage an ihre Adresse.

Wähle Laden, um die Services zu lesen. Wähle dann den Service und die Methode. Neben der Methode zeigt Echolot ihre Art: unary, server streaming, client streaming oder bidirectional streaming.

Mit einer .proto-Datei auf der Seite „Specs“ zu beginnen ist schneller: Ihre Gliederung listet jede Methode, jeweils mit einem Knopf, der dafür eine gRPC-Anfrage mit einer Beispielnachricht erstellt.

Die Nachricht schreiben

Die Nachricht ist JSON, im JSON-Mapping von protobuf, mit {{variables}}:

{
  "sku": "TNT-MH-2P",
  "quantity": 1,
  "order_id": "{{orderId}}"
}

Beispiel ersetzt die Nachricht durch jedes Feld der Eingabe der Methode mit einem Beispielwert, verschachtelte Nachrichten eingeschlossen, als Ausgangspunkt.

Im JSON-Mapping sind 64-Bit-Ganzzahlen Strings, Bytes sind Base64, Enums sind ihre Namen, Maps sind Objekte, und Timestamp, Duration, FieldMask, die Wrapper, Struct und Any haben ihre üblichen JSON-Formen. Ein Schlüssel, den der Nachrichtentyp nicht hat, wird abgelehnt, damit ein Tippfehler nicht unbemerkt bleibt.

Aufrufarten

ArtDie Nachricht, die du schreibstDie Antwort
UnaryEin JSON-ObjektEin JSON-Objekt
Server streamingEin JSON-ObjektEin JSON-Array mit jeder Nachricht, die der Server gesendet hat
Client streamingEin JSON-Array mit NachrichtenEin JSON-Objekt
Bidirectional streamingEin JSON-Array mit NachrichtenEin JSON-Array mit jeder Nachricht, die der Server gesendet hat

Bei Inventory › Watch stock, einem Server-Streaming-Aufruf, nennt die Nachricht die zu beobachtenden Produkte, und die Antwort ist die Liste der Lagerbestände, die der Server gesendet hat.

Status, Metadaten und Trailer

gRPC meldet den Verlauf eines Aufrufs in seinem Status, der nach den Nachrichten in den Trailern ankommt. Die Zusammenfassung der Antwort zeigt ihn: OK in Grün oder der Status mit seinem Code in Rot, etwa NOT_FOUND (5), mit der Zahl der empfangenen Nachrichten und ihrer Komprimierung. Der Tab Header der Antwort zeigt die Antwort-Header.

Um den Status in Tests zu prüfen, füge im Tab Tests eine Prüfung gRPC-Status hinzu: Sie ist standardmäßig OK und nimmt Namen (NOT_FOUND) oder Codes (5). Siehe Skripte und Tests.

Komprimierung und Frist

Das Badge gRPC vor der Adresse ist ein Menü:

  • Nachrichten komprimieren: Ohne, gzip oder deflate. Komprimierte Antworten werden immer gelesen, egal was hier steht.
  • Frist: Keine Deadline oder 500 ms, 1 s, 5 s oder 30 s. Die Frist geht an den Server, und ein Aufruf, der sie überschreitet, endet mit DEADLINE_EXCEEDED.

TLS und Zertifikate

Eine http://-Adresse ruft den Server über HTTP/2 ohne TLS auf. Eine https://-Adresse nutzt TLS mit den Zertifikatsregeln des Arbeitsbereichs, sodass eigene CA-Zertifikate und Client-Zertifikate funktionieren. Siehe Anfrageeinstellungen.

In der Befehlszeile

echolot grpc describe listet die Services und Methoden eines Servers auf, und echolot grpc call führt einen Aufruf aus und beendet sich bei einem anderen Status als OK mit 1. Siehe echolot grpc.

Auf dieser Seite