gRPC para Kotlin: bibliotecas e exemplos de uso
gRPC é um framework de alto desempenho para chamada remota de procedimentos (RPC), desenvolvido pelo Google. Ele utiliza Protocol Buffers (protobuf) para serialização de dados e HTTP/2 para transporte. No ecossistema Kotlin, o gRPC se integra de forma especialmente suave graças a bibliotecas que suportam corrotinas e tipagem estrita. Neste artigo, veremos as principais ferramentas necessárias para trabalhar com gRPC em Kotlin e forneceremos exemplos funcionais de servidor e cliente.
Bibliotecas principais
Para trabalhar com gRPC em Kotlin, você precisará da seguinte pilha:
- grpc-kotlin — biblioteca oficial do Google que fornece APIs específicas do Kotlin, incluindo suporte a corrotinas (funções suspend, Flow).
- protobuf-java e protobuf-gradle-plugin — para geração de classes a partir de arquivos .proto.
- grpc-netty ou grpc-okhttp — camada de transporte (Netty para servidor, OkHttp para Android/cliente).
- javax.annotation-api — frequentemente necessário para compilar corretamente o código gerado.
Para gerenciar dependências, use Gradle (Kotlin DSL). Exemplo do bloco dependencies:
dependencies { implementation("io.grpc:grpc-netty-shaded:1.58.0") implementation("io.grpc:grpc-protobuf:1.58.0") implementation("io.grpc:grpc-stub:1.58.0") implementation("io.grpc:grpc-kotlin-stub:1.4.0") implementation("com.google.protobuf:protobuf-java:3.24.3") implementation("javax.annotation:javax.annotation-api:1.3.2")}Também é obrigatório adicionar o plugin protobuf para geração de código:
plugins { id("com.google.protobuf") version "0.9.4"}
protobuf { protoc { artifact = "com.google.protobuf:protoc:3.24.3" } plugins { create("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:1.58.0" } create("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:1.4.0:jdk8@jar" } } generateProtoTasks { all().forEach { it.plugins { create("grpc") create("grpckt") } } }}Definição do serviço através do arquivo .proto
Crie o arquivo src/main/proto/hello.proto:
syntax = "proto3";
package com.example.grpc;
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply);}
message HelloRequest { string name = 1;}
message HelloReply { string message = 1;}Após executar a compilação do Gradle, as classes serão geradas: HelloRequest, HelloReply, GreeterGrpc e GreeterGrpcKt (versão Kotlin com corrotinas).
Implementação do servidor gRPC em Kotlin
O servidor usará a classe gerada GreeterGrpcKt.GreeterCoroutineImplBase:
import com.example.grpc.GreeterGrpcKtimport com.example.grpc.HelloReplyimport com.example.grpc.HelloRequestimport io.grpc.ServerBuilderimport kotlinx.coroutines.runBlocking
class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() { override suspend fun sayHello(request: HelloRequest): HelloReply { val message = "Olá, ${request.name}!" println("Requisição recebida: ${request.name}") return HelloReply.newBuilder().setMessage(message).build() }}
fun main() { val port = 50051 val server = ServerBuilder.forPort(port) .addService(GreeterService()) .build()
server.start() println("Servidor iniciado na porta $port") server.awaitTermination()}Implementação do cliente gRPC em Kotlin
O cliente usa um canal e um stub com suporte a corrotinas:
import com.example.grpc.GreeterGrpcKti Também na biblioteca
Internacionalização (i18n) em Kotlin: Guia Completo com Exemplos
Guia completo do Twilio para JavaScript (Node.js) com exemplos
sqlc para Go: guia completo com exemplos práticos