Tonic para Rust: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é Tonic e para que serve?

\n\n

Tonic é uma biblioteca moderna e de alto desempenho para implementar servidores e clientes gRPC na linguagem Rust. Ela é construída sobre o runtime assíncrono Tokio e o framework HTTP/2 Hyper, garantindo desempenho máximo e total compatibilidade com o padrão gRPC.

\n\n

Principais vantagens do Tonic:

\n
    \n
  • Assincronicidade nativa — totalmente async/await, sem bloqueios
  • \n
  • Segurança de tipos — geração de código a partir de arquivos proto em tempo de compilação
  • \n
  • Suporte a todos os padrões gRPC — unary, server streaming, client streaming, bidirectional streaming
  • \n
  • Integração com o ecossistema Rust — funciona com Tokio, Tower, Hyper e outras crates populares
  • \n
  • Desempenho — um dos frameworks gRPC mais rápidos
  • \n
\n\n

A biblioteca é usada em produção por empresas como Discord, Microsoft, Amazon e muitas outras. Tonic é ideal para criar microsserviços, gateways de API e qualquer sistema distribuído que exija comunicação eficiente entre serviços.

\n\n

Instalação do Tonic

\n\n

Para trabalhar com Tonic, você precisará instalar várias dependências. Adicione-as ao seu Cargo.toml:

\n\n
[dependencies]\ntonic = "0.12"\nprost = "0.13"\ntokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }\n\n[build-dependencies]\ntonic-build = "0.12"
\n\n

Explicação das dependências:

\n
    \n
  • tonic — biblioteca principal para trabalhar com gRPC
  • \n
  • prost — gerador de código Protocol Buffers para Rust
  • \n
  • tokio — runtime assíncrono
  • \n
  • tonic-build — usado em tempo de compilação para compilar arquivos .proto
  • \n
\n\n

Você também precisará instalar o protoc — o compilador Protocol Buffers. No Ubuntu/Debian:

\n\n
sudo apt install protobuf-compiler
\n\n

No macOS:

\n\n
brew install protobuf
\n\n

No Windows, baixe o binário do repositório oficial e adicione-o ao PATH.

\n\n

Início rápido: Hello World com gRPC

\n\n

Vamos criar um serviço simples que recebe um nome e retorna uma saudação.

\n\n

Passo 1. Crie o arquivo proto/helloworld.proto:

\n\n
syntax = "proto3";\n\npackage helloworld;\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\n

Passo 2. Crie o build.rs na raiz do projeto:

\n\n
fn main() -> Result<(), Box> {\n    tonic_build::compile_protos("proto/helloworld.proto")?;\n    Ok(())\n}
\n\n

Passo 3. Implemente o servidor (src/server.rs):

\n\n
use tonic::{transport::Server, Request, Response, Status};\nuse hello_world::greeter_server::{Greeter, GreeterServer};\nuse hello_world::{HelloRequest, HelloReply};\n\npub mod hello_world {\n    tonic::include_proto!("helloworld");\n}\n\n#[derive(Default)]\npub struct MyGreeter;\n\n#[tonic::async_trait]\nimpl Greeter for MyGreeter {\n    async fn say_hello(\n        &self,\n        request: Request,\n    ) -> Result, Status> {\n        let name = request.into_inner().name;\n        let reply = HelloReply {\n            message: format!("Hello, {}!", name),\n        };\n        Ok(Response::new(reply))\n    }\n}\n\n#[tokio::main]\nasync fn main() -> Result<(), Box> {\n    let addr = "[::1]:50051".parse()?;\n    let greeter = MyGreeter::default();\n\n    Server::builder()\n        .add_service(GreeterServer::new                    

Recommendations