gRPC et gRPC-Web
GuideDéveloppeursDepuis la version 1.1.0
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/GetOrderconn, _ := 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/42Un 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 |