gRPC pour PHP : bibliothèques et exemples d'implémentation
gRPC (gRPC Remote Procedure Calls) est un framework haute performance pour l'appel de procédures à distance, développé par Google. Il utilise Protocol Buffers (protobuf) comme langage de description d'interfaces et de sérialisation des données. Contrairement à REST, gRPC fonctionne sur HTTP/2, prend en charge le streaming bidirectionnel et assure un typage strict. Dans cet article, nous verrons comment intégrer gRPC en PHP, quelles bibliothèques utiliser, et nous écrirons un exemple complet d'interaction client-serveur.
Aperçu des bibliothèques pour gRPC en PHP
Pour travailler avec gRPC en PHP, deux approches principales sont disponibles :
- L'extension grpc.so — l'extension C officielle de gRPC. Elle offre des performances maximales, mais nécessite une compilation et une configuration sur le serveur.
- Le client PHP pur (par exemple,
grpc/grpcvia Composer) — une implémentation en PHP fonctionnant via cURL et HTTP/2. Plus lent, mais plus simple à déployer.
Pour la production, il est recommandé d'utiliser l'extension grpc, et pour le développement ou les tests, le client PHP pur.
Installation des composants nécessaires
1. Installation de protoc et du plugin pour PHP
Téléchargez le compilateur protobuf depuis le dépôt officiel pour votre système d'exploitation. Pour générer du code PHP, vous aurez besoin du plugin protoc-gen-php-grpc :
# Installation de protoc (Linux)wget https://github.com/protocolbuffers/protobuf/releases/download/v25.0/protoc-25.0-linux-x86_64.zipunzip protoc-25.0-linux-x86_64.zip -d /usr/local/protocexport PATH=$PATH:/usr/local/protoc/bin
# Installation du plugin pour gRPC PHPsudo apt-get install php-dev php-cli php-pearsudo pecl install grpcsudo pecl install protobuf2. Installation des dépendances Composer
Créez un projet et ajoutez les paquets nécessaires :
composer initcomposer require grpc/grpccomposer require google/protobufCréation du fichier .proto
Définissons un service simple pour travailler avec les utilisateurs. Créez le fichier user.proto :
syntax = "proto3";
package user;
service UserService { rpc GetUser (UserRequest) returns (UserResponse); rpc ListUsers (Empty) returns (stream UserResponse);}
message UserRequest { int32 id = 1;}
message UserResponse { int32 id = 1; string name = 2; string email = 3;}
message Empty {}Génération du code PHP à partir de .proto
Exécutez la commande pour compiler le fichier .proto en classes PHP :
protoc --php_out=./generated --grpc_out=./generated \ --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin \ user.protoDans le dossier generated, les fichiers suivants apparaîtront :
GPBMetadata/User.php— métadonnées du fichier protoUser/UserRequest.php— classe de requêteUser/UserResponse.php— classe de réponseUser/UserServiceClient.php— client pour appeler le service
Implémentation du serveur gRPC en PHP
Pour la partie serveur, utilisez l'extension officielle grpc. Créez le fichier server.php :
<?phprequire_once __DIR__ . '/vendor/autoload.php';require_once __DIR__ . '/generated/User/UserServiceInterface.php';require_once __DIR__ . '/generated/User/UserServiceServer.php';
use Grpc\\Server;use User\\UserRequest;use User\\UserResponse;use User\\UserServiceServer;
class MyUserService extends UserServiceServer{ public function GetUser(\\User\\UserRequest $request): \\User\\UserResponse { $response = new UserResponse(); $response->setId($request->getId()); $response->setName('John Doe'); $response->setEmail('john@exa Aussi dans la bibliothèque
Bcrypt pour JavaScript (Node.js) : guide complet avec exemples
Traitement JSON en C# (.NET) : Guide complet sur Newtonsoft.Json et System.Text.Json
SwiftyJSON Swift : guide complet avec exemples pratiques
Autorisation et authentification en PHP : guide complet avec exemples
Kotlinx.serialization et Valiktor : validation de données en Kotlin