gRPC pour PHP : bibliothèques, installation et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

gRPC pour PHP : bibliothèques et exemples

\n\n

gRPC est un framework moderne et haute performance pour l'appel de procédures distantes (RPC), développé par Google. Il utilise HTTP/2 pour le transport, Protocol Buffers (protobuf) pour la sérialisation des données et prend en charge de nombreux langages, dont PHP. Dans cet article, nous allons voir comment intégrer gRPC à un projet PHP, quelles bibliothèques sont nécessaires, et écrire un exemple fonctionnel d'interaction client-serveur.

\n\n

Pourquoi utiliser gRPC en PHP ?

\n

Les API REST traditionnelles fonctionnent souvent avec JSON et HTTP/1.1, ce qui entraîne une redondance des données et une sérialisation lente. gRPC résout ces problèmes :

\n
    \n
  • Protocole binaire — protobuf prend moins de place que JSON et est traité plus rapidement.
  • \n
  • HTTP/2 — multiplexage, compression des en-têtes, transmission en continu.
  • \n
  • Typage strict — les contrats sont décrits dans des fichiers .proto, ce qui simplifie le développement et le débogage.
  • \n
  • Transmission bidirectionnelle en continu — le serveur et le client peuvent échanger des données de manière asynchrone.
  • \n
\n\n

Bibliothèques principales pour gRPC en PHP

\n

Pour travailler avec gRPC en PHP, deux composants sont nécessaires :

\n
    \n
  • grpc.so — l'extension PHP (extension C) qui implémente HTTP/2 et le protocole gRPC.
  • \n
  • protobuf.so — l'extension pour la sérialisation protobuf (alternative : le paquet PHP pur google/protobuf).
  • \n
  • Paquets Composer : grpc/grpc et google/protobuf.
  • \n
\n\n

La méthode d'installation recommandée est via PECL (extensions) et Composer (dépendances).

\n\n

Installation de gRPC et protobuf

\n

Pour les serveurs Linux (Ubuntu/Debian) :

\n
# Installation des extensions via PECL\nsudo pecl install grpc\nsudo pecl install protobuf\n\n# Ajout dans php.ini\necho "extension=grpc.so" >> /etc/php/8.2/cli/php.ini\necho "extension=protobuf.so" >> /etc/php/8.2/cli/php.ini
\n\n

Pour Windows, téléchargez les fichiers DLL depuis PECL et indiquez-les dans php.ini.

\n\n

Ensuite, installez les bibliothèques via Composer :

\n
composer require grpc/grpc\ncomposer require google/protobuf
\n\n

Création du fichier .proto

\n

Décrivons un service pour la gestion des utilisateurs. Créez le fichier user.proto :

\n
syntax = "proto3";\n\npackage user;\n\nservice UserService {\n    rpc GetUser (UserRequest) returns (UserResponse);\n    rpc ListUsers (Empty) returns (UserList);\n}\n\nmessage UserRequest {\n    int32 id = 1;\n}\n\nmessage UserResponse {\n    int32 id = 1;\n    string name = 2;\n    string email = 3;\n}\n\nmessage Empty {}\n\nmessage UserList {\n    repeated UserResponse users = 1;\n}
\n\n

Génération des classes PHP à partir de .proto

\n

Installez protoc et le plugin pour PHP :

\n
# Téléchargez protoc depuis https://github.com/protocolbuffers/protobuf/releases\n# Ensuite, générez le code :\nprotoc --php_out=./generated --grpc_out=./generated --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto
\n\n

Dans le dossier generated, les classes apparaîtront : UserRequest, UserResponse, UserServiceClient, etc.

\n\n

Exemple de serveur gRPC en PHP

\n

Créons un serveur qui répondra aux requêtes. Fichier server.php :

\n
require_once __DIR__ . '/vendor/autoload.php';\nrequire_once __DIR__ . '/generated/UserServiceServer.php';\n\nuse Grpc\\Server;\nuse User\\UserServiceServer;\nuse User\\UserRequest;\nuse User\\UserResponse;\n\nclass MyUserService extends UserServiceServer\n{\n    public function GetUser(\\Grpc\\ServerCallReader $request, \\Grpc\\ServerCallWriter $response, \\Grpc\\ServerContext $context): void\n    {\n        $req = $request->read();\n        $id = $req->getId();\n\n        $user = new UserResponse();\n        $user->setId($id);\n        $                    

Recommendations