gRPC para TypeScript: bibliotecas e exemplos
\n\ngRPC é um framework RPC de alto desempenho do Google, que opera sobre HTTP/2 e utiliza Protocol Buffers (protobuf) para serialização de dados. Em TypeScript (e Node.js), o gRPC permite construir arquiteturas de microsserviços eficientes com suporte a streams e comunicação bidirecional. Nesta página, abordaremos as principais bibliotecas, a configuração do ambiente de trabalho e criaremos um exemplo funcional de aplicação cliente-servidor.
\n\nPrincipais bibliotecas para gRPC em TypeScript
\n\nPara trabalhar com gRPC no ecossistema TypeScript, existem três pacotes-chave:
\n\n- \n
@grpc/grpc-js— implementação pura em JavaScript do gRPC (sem dependências nativas), com suporte total a HTTP/2 e funcionando em Node.js 12+. \n @grpc/proto-loader— carregador de arquivos.proto, que cria dinamicamente classes JavaScript com base nas definições do protobuf. \n ts-proto— gerador de tipos TypeScript a partir de arquivos proto. Alternativa aogrpc-toolsintegrado, mas com melhor suporte a tipagem estrita. \n
Instalação de todos os componentes com um único comando:
\n\nnpm install @grpc/grpc-js @grpc/proto-loader ts-proto\nnpm install -D typescript @types/node\n\nCriação do arquivo .proto
\n\nVamos começar definindo o serviço. Crie o arquivo hello.proto:
syntax = "proto3";\n\npackage hello;\n\nservice Greeter {\n rpc SayHello (HelloRequest) returns (HelloReply);\n rpc SayHelloStream (HelloRequest) returns (stream HelloReply);\n}\n\nmessage HelloRequest {\n string name = 1;\n}\n\nmessage HelloReply {\n string message = 1;\n}\n\nGeração de tipos TypeScript com ts-proto
\n\nO ts-proto cria interfaces e classes de mensagem completas. Instale o protoc e o plugin:
npm install -g protoc-gen-ts-proto\nprotoc --ts_proto_out=./generated hello.proto\n\nComo resultado, você obterá o arquivo generated/hello.ts com as interfaces HelloRequest, HelloReply e o serviço tipado GreeterClient.
Parte do servidor (servidor gRPC em TypeScript)
\n\nCrie o arquivo server.ts:
import * as grpc from '@grpc/grpc-js';\nimport * as protoLoader from '@grpc/proto-loader';\nimport { ProtoGrpcType } from './generated/hello';\n\nconst packageDef = protoLoader.loadSync('hello.proto');\nconst grpcObj = (grpc.loadPackageDefinition(packageDef) as unknown) as ProtoGrpcType;\nconst server = new grpc.Server();\n\nserver.addService(grpcObj.hello.Greeter.service, {\n SayHello: (call: any, callback: any) => {\n const name = call.request.name;\n callback(null, { message: `Olá, ${name}!` });\n },\n SayHelloStream: (call: any) => {\n const name = call.request.name;\n for (let i = 0; i < 5; i++) {\n call.write({ message: `Mensagem ${i + 1} para ${name}` });\n }\n call.end();\n }\n});\n\nserver.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {\n console.log('Servidor iniciado na porta 50051');\n});\n\nParte do cliente (cliente gRPC em TypeScript)
\n\nCrie o arquivo client.ts:
import * as grpc from '@grpc/grpc-js';\nimport * as protoLoader from '@grpc/proto-loader';\nimport { ProtoGrpcType } from './generated/hello';\n\nconst packageDef = protoLoader.loadSync('hello.proto');\nconst grpcObj = (grpc.loadPackageDefinition(packageDef) as unknown) as ProtoGrpcType;\n\nconst client = new grpcObj.hello.Greeter(\n 'localhost:50051',\n grpc.credentials.createInsecure()\n);\n\n// Chamada unária\nclient.SayHello({ name: 'Alice' }, (err, response) => {\n if (!err) console.log('Resposta:', response?.message);\n});\n\n// Chamada com server-streaming\nconst stream = client.SayHelloStream({ name: 'Bob' });\nstream.on('data', (data) => console.log('Stream:', data.message));\nstream.on('end', ( Também na biblioteca
Trabalho com XML em Kotlin: bibliotecas, parsing e criação de documentos
Swagger-PHP para PHP: guia completo com exemplos práticos
Configuração de aplicações PHP: bibliotecas e ferramentas para gerenciamento de configurações
Geração de PDF em Kotlin: bibliotecas e ferramentas (iText, Apache PDFBox)