flexway
FRENParler à un expert

gRPC et gRPC-Web

GuideDéveloppeursDepuis la version 1.1.0

Markdown

Sur cette page

Un service gRPC derrière Flexway se lit de trois façons : gRPC natif, gRPC-Web depuis un navigateur, et REST/JSON aux routes de ses annotations. C'est une opération par méthode.

Côté produit : gRPC ; côté exploitation : Un amont gRPC.

gRPC

Le port de trafic de la passerelle sert gRPC (HTTP/2, en clair dans un maillage ou en TLS). Les métadonnées portent l'identité :

grpcurl -protoset orders.binpb -H "authorization: Bearer $TOKEN" \
  -d '{"id":"42"}' api.example.com:443 shop.v1.Orders/GetOrder
conn, _ := grpc.NewClient("api.example.com:443", grpc.WithTransportCredentials(credentials.NewTLS(nil)))
ctx := metadata.AppendToOutgoingContext(ctx, "authorization", "Bearer "+token)
order, err := shopv1.NewOrdersClient(conn).GetOrder(ctx, &shopv1.GetOrderRequest{Id: "42"})

REST sur la même méthode

curl -H "Authorization: Bearer $TOKEN" https://api.example.com/v1/shop/orders/42

Un flux serveur arrive en text/event-stream. Les flux client et bidirectionnels ne sont servis qu'en gRPC.

gRPC-Web depuis un navigateur

Utilisez un client gRPC-Web standard (grpc-web, Connect en mode gRPC-Web). L'exploitant doit autoriser votre origine et exposer grpc-status, grpc-message et grpc-status-details-bin : sans eux, le navigateur ne peut pas lire un refus.

Erreurs

Vous appelez en Vous recevez
gRPC, gRPC-Web google.rpc.Status ; le code du problème dans ErrorInfo.reason
REST RFC 9457 ; une erreur de l'amont gRPC devient upstream_status, son statut gRPC dans l'extension grpc
Code de la passerelle Statut gRPC
unauthenticated UNAUTHENTICATED
forbidden PERMISSION_DENIED
invalid_request, malformed_request INVALID_ARGUMENT
rate_limited, quota_exceeded RESOURCE_EXHAUSTED
upstream_unavailable, overloaded UNAVAILABLE
upstream_timeout DEADLINE_EXCEEDED

Étapes suivantes