gRPC pour Kotlin : bibliothèques et exemples d'utilisation
\n\ngRPC est un framework haute performance pour l'appel de procédure à distance (RPC), développé par Google. Il utilise Protocol Buffers (protobuf) pour la sérialisation des données et HTTP/2 pour le transport. Dans l'écosystème Kotlin, gRPC s'intègre particulièrement bien grâce à des bibliothèques prenant en charge les coroutines et le typage strict. Dans cet article, nous examinerons les outils principaux nécessaires pour travailler avec gRPC en Kotlin et fournirons des exemples fonctionnels de serveur et de client.
\n\nBibliothèques principales
\n\nPour travailler avec gRPC en Kotlin, la pile suivante est nécessaire :
\n\n- \n
- grpc-kotlin — la bibliothèque officielle de Google, fournissant des API spécifiques à Kotlin, incluant le support des coroutines (fonctions suspend, Flow). \n
- protobuf-java et protobuf-gradle-plugin — pour la génération de classes à partir de fichiers .proto. \n
- grpc-netty ou grpc-okhttp — la couche de transport (Netty pour le serveur, OkHttp pour Android/client). \n
- javax.annotation-api — souvent nécessaire pour une compilation correcte du code généré. \n
Pour la gestion des dépendances, utilisez Gradle (Kotlin DSL). Exemple de bloc dependencies :
\n\ndependencies {\n implementation("io.grpc:grpc-netty-shaded:1.58.0")\n implementation("io.grpc:grpc-protobuf:1.58.0")\n implementation("io.grpc:grpc-stub:1.58.0")\n implementation("io.grpc:grpc-kotlin-stub:1.4.0")\n implementation("com.google.protobuf:protobuf-java:3.24.3")\n implementation("javax.annotation:javax.annotation-api:1.3.2")\n}\n\nAssurez-vous également d'ajouter le plugin protobuf pour la génération de code :
\n\nplugins {\n id("com.google.protobuf") version "0.9.4"\n}\n\nprotobuf {\n protoc {\n artifact = "com.google.protobuf:protoc:3.24.3"\n }\n plugins {\n create("grpc") {\n artifact = "io.grpc:protoc-gen-grpc-java:1.58.0"\n }\n create("grpckt") {\n artifact = "io.grpc:protoc-gen-grpc-kotlin:1.4.0:jdk8@jar"\n }\n }\n generateProtoTasks {\n all().forEach {\n it.plugins {\n create("grpc")\n create("grpckt")\n }\n }\n }\n}\n\nDéfinition du service via un fichier .proto
\n\nCréez le fichier src/main/proto/hello.proto :
syntax = "proto3";\n\npackage com.example.grpc;\n\nservice Greeter {\n rpc SayHello (HelloRequest) returns (HelloReply);\n}\n\nmessage HelloRequest {\n string name = 1;\n}\n\nmessage HelloReply {\n string message = 1;\n}\n\nAprès avoir exécuté la construction Gradle, les classes suivantes seront générées : HelloRequest, HelloReply, GreeterGrpc et GreeterGrpcKt (version Kotlin avec coroutines).
Implémentation du serveur gRPC en Kotlin
\n\nLe serveur utilisera la classe générée GreeterGrpcKt.GreeterCoroutineImplBase :
import com.example.grpc.GreeterGrpcKt\nimport com.example.grpc.HelloReply\nimport com.example.grpc.HelloRequest\nimport io.grpc.ServerBuilder\nimport kotlinx.coroutines.runBlocking\n\nclass GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() {\n override suspend fun sayHello(request: HelloRequest): HelloReply {\n val message = "Bonjour, ${request.name}!"\n println("Requête reçue : ${request.name}")\n return HelloReply.newBuilder().setMessage(message).build()\n }\n}\n\nfun main() {\n val port = 50051\n val server = ServerBuilder.forPort(port)\n .addService(GreeterService())\n .build()\n\n server.start()\n println("Serveur démarré sur le port $port")\n server.awaitTermination()\n}\n\nImplémentation du client gRPC en Kotlin
\n\nLe client utilise un canal et un stub avec support des coroutines :
\n\nimport com.example.grpc.GreeterGrpcKt\ni Aussi dans la bibliothèque
Passport.js pour JavaScript (Node.js) : guide complet avec exemples
neverthrow TypeScript : guide complet avec exemples
Armadillo C++ : guide complet avec exemples pratiques
TypeORM pour TypeScript : guide complet avec exemples
Travailler avec les jetons JWT en TypeScript : bibliothèque jsonwebtoken et guide complet