Requêtes

gRPC dynamique

Server reflection, import .proto sans protoc, DynamicMessage et les quatre types de streaming.

# Découverte de schéma

Zapi est un client gRPC dynamique : aucun type généré n’est nécessaire. Le schéma vient soit de la server reflection, soit d’un fichier .proto compilé à la volée par protox (sans protoc).

requests/echo.yml
name: Echo unary
kind: grpc
url: "https://grpcb.in:9001"
grpcService: grpcbin.GRPCBin
grpcMethod: DummyUnary
body:
  type: json
  content: |
    { "fString": "salut zapi" }

# Import .proto

echo.proto
syntax = "proto3";
package echo;

service EchoService {
  rpc Echo (EchoRequest) returns (EchoReply);
  rpc Stream (EchoRequest) returns (stream EchoReply);
}

message EchoRequest { string text = 1; }
message EchoReply { string text = 1; int64 received_at = 2; }

À l’import, Zapi construit un pool de descripteurs, liste les services et méthodes, puis génère un squelette JSON pour le message d’entrée.

# Streaming

Type d’appelComportement
UnaryUn message de requête, une réponse.
Server streamingUne requête, plusieurs messages entrants.
Client streamingPlusieurs messages sortants, une réponse.
BidirectionnelMessages entrants et sortants en parallèle.

Les réponses sont décodées en JSON via prost_reflect::DynamicMessage, ce qui garde une interface lisible même sans code généré.