Client gRPC pour Delphi

· Composants

sgcWebSockets propose désormais un client gRPC natif pour Delphi et C++Builder. Le nouveau composant TsgcGRPCClient dialogue en gRPC sur le transport HTTP/2 propre à la bibliothèque, donc il n'y a aucun runtime gRPC externe, aucune bibliothèque C et aucune DLL supplémentaire à déployer. Il fait partie de l'édition Enterprise et fonctionne sous Windows, macOS, Linux, iOS et Android.

gRPC n'est rien d'autre que des messages Protocol Buffers encadrés sur HTTP/2. sgcWebSockets dispose déjà d'une pile HTTP/2 complète, le client gRPC se construit donc directement par-dessus : il encadre les octets de votre requête, applique les en-têtes et les délais gRPC, puis analyse le statut et les trailers pour les transformer en résultats typés.

Construit sur le transport HTTP/2 natif

Un canal gRPC est une connexion HTTP/2. Vous créez un TsgcHTTP2Client, vous le pointez vers l'hôte et le port, puis vous l'affectez à la propriété Client du composant gRPC. Le TLS est géré par le client HTTP/2 via OpenSSL ou Windows SChannel.

uses
  sgcHTTP2, sgcGRPC_Client, sgcGRPC_Classes, sgcGRPC_Types;

var
  HTTP2: TsgcHTTP2Client;
  GRPC: TsgcGRPCClient;
  oResponse: TsgcGRPCResponse;
begin
  HTTP2 := TsgcHTTP2Client.Create(nil);
  HTTP2.Host := 'grpc.example.com';
  HTTP2.Port := 443;
  HTTP2.TLS  := True;

  GRPC := TsgcGRPCClient.Create(nil);
  GRPC.Client := HTTP2;

  // metadata is sent on every call (auth, tracing...)
  GRPC.DefaultMetadata.Add('authorization', 'Bearer eyJ...');

  // unary call: the request is your serialized protobuf message as TBytes
  oResponse := GRPC.Call('helloworld.Greeter', 'SayHello', RequestBytes);
  if oResponse.StatusCode = grpcOK then
    Memo1.Text := oResponse.DataString
  else
    ShowMessage('gRPC error: ' + oResponse.StatusMessage);
end;

Les quatre types d'appels

Le composant prend en charge tous les schémas d'interaction gRPC, en mode synchrone ou asynchrone :

Une réponse transporte tout ce que l'appel a renvoyé : StatusCode, StatusMessage, les octets bruts Data (ou DataString) et les Trailers.

Métadonnées, délais et options de canal

Les en-têtes personnalisés transitent par DefaultMetadata pour l'ensemble du canal, ou appel par appel. Un délai propre à un appel est traduit dans l'en-tête standard grpc-timeout, et CancelCall interrompt un flux en cours. Le canal lui-même se règle via ChannelOptions.

// gzip compression and channel limits
GRPC.ChannelOptions.Compression := grpcGzip;
GRPC.ChannelOptions.MaxMessageSize := 16 * 1024 * 1024;

// abort a long-running stream
GRPC.CancelCall(StreamId);

Intercepteurs, nouvelle tentative et observabilité

Une chaîne d'Interceptors enveloppe chaque appel, ce qui vous permet d'ajouter la journalisation, le renouvellement d'authentification ou le traçage en un seul endroit. RetryPolicy relance l'appel selon les codes de statut que vous choisissez, ServiceConfig applique une politique par méthode, et MetricsCollector enregistre les compteurs et les latences des appels.

GRPC.RetryPolicy.MaxAttempts := 4;
GRPC.RetryPolicy.RetryableStatusCodes :=
  GRPC.RetryPolicy.RetryableStatusCodes + [grpcUNAVAILABLE];

Utilisez vos propres Protocol Buffers

Le client prend et renvoie des octets de message bruts (TBytes), il ne vous enferme donc dans aucune bibliothèque Protocol Buffers particulière. Encodez votre requête avec l'outillage protobuf que vous utilisez déjà, passez les octets à Call, et décodez les octets de la réponse de la même façon. Le composant gère pour vous l'encadrement avec préfixe de longueur gRPC, l'indicateur de compression, les codes de statut et les trailers.

API gRPC Google Cloud incluses

En plus du client générique, sgcWebSockets propose des clients typés pour les services gRPC de Google Cloud : Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery et Vertex AI. Ils gèrent l'authentification par compte de service ainsi que les messages de requête et de réponse, vous appelez donc des méthodes de haut niveau au lieu de construire des protobufs à la main.

Disponibilité

Le client gRPC est disponible dès maintenant dans l'édition Enterprise de sgcWebSockets pour Delphi et C++Builder. Un exemple prêt à l'emploi est inclus dans Demos\21.GRPC\01.GRPC_Client, et la référence complète des propriétés, méthodes et événements se trouve sur la page produit du client gRPC.

Des questions, des retours ou besoin d'aide pour démarrer ? Contactez-nous. Vous recevrez une réponse des personnes qui ont écrit le code.