Introdução
Neste tutorial, vamos explorar o desenvolvimento de um microserviço robusto utilizando Rust, um dos linguagens mais modernas e seguras disponíveis. Focaremos no uso do Actix-web, um framework altamente eficiente para construção de APIs, juntamente com o Diesel, um ORM para gerenciamento de banco de dados. Você terá a oportunidade de aprender desde a configuração do ambiente até a implementação completa de funcionalidades RESTful, incluindo testes automatizados. Este guia é ideal para desenvolvedores que buscam adotar Rust em seus projetos e desejam construir aplicações escaláveis e de alto desempenho.
Etapas
Configuração do Ambiente de Desenvolvimento
Para começar, você precisa ter o Rust e o Cargo instalados em sua máquina. Verifique se ambos estão instalados corretamente com os comandos `rustc –version` e `cargo –version`. Se você ainda não tem o Rust instalado, acesse o site oficial do Rust e siga as instruções de instalação.
commands# Verificar versões instaladas
rustc --version
cargo --versionCriação do Projeto com Cargo
Use o Cargo para criar um novo projeto Rust. Execute o comando abaixo no terminal, substituindo `microservico` pelo nome desejado para o seu projeto.
commandscargo new microservico
cd microservicoAdicionando Dependências no Cargo.toml
Abra o arquivo `Cargo.toml` e adicione as dependências necessárias para Actix-web e Diesel. Você também precisará de uma biblioteca para SQLite como banco de dados.
Cargo.toml[dependencies] actix-web = "4.0" diesel = { version = "1.4", features = ["sqlite"] } diesel_migrations = "1.4"
Inicializando Diesel
Execute o comando abaixo para configurar o Diesel e criar um banco de dados SQLite. Isso também criará um diretório de migrações para seu projeto.
commandscargo install diesel_cli --no-default-features --features sqlite
diesel setupCriando a Estrutura da Tabela com Diesel
Use Diesel para criar a tabela `produtos` em seu banco de dados. Crie um arquivo de migração com o comando abaixo e defina a estrutura da tabela em seu arquivo de migração que será gerado.
commandsdiesel migration generate create_produtos
cd migrations/{id}/up.sqlmigration_fileCREATE TABLE produtos ( id INTEGER PRIMARY KEY AUTOINCREMENT, nome TEXT NOT NULL, preco REAL NOT NULL );
Implementação do Modelo Produto em Rust
Crie uma estrutura que represente `Produto` no arquivo main.rs. Utilize macros do Diesel para definir as colunas da tabela.
main.rsuse diesel::{Queryable, Insertable}; #[derive(Queryable, Insertable)] #[table_name = "produtos"] pub struct Produto { pub id: i32, pub nome: String, pub preco: f64, }
Configurando o Actix-web para Criar Endpoints
Configure o Actix-web em seu `main.rs` para criar endpoints que permitirão interagir com a API dos produtos que acabamos de implementar.
main.rsuse actix_web::{web, App, HttpServer}; #[actix_web::main] async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new() .route("/produtos", web::get().to(get_produtos)) }) .bind("127.0.0.1:8080")? .run() .await } async fn get_produtos() -> impl Responder { // lógica para obter produtos do banco de dados }
Testando a API com Postman
Após ter tudo implementado, utilize o Postman para testar seus endpoints. Execute o servidor com `cargo run` e faça chamadas GET para `http://localhost:8080/produtos`.
commandscargo run
Implementação de Testes Unitários
Crie testes unitários em Rust para validar as suas funções de interação com o banco de dados e a API. Utilize a biblioteca padrão de testes do Rust.
test_file#[cfg(test)] mod tests { use super::*; #[test] fn test_produto_creation() { let produto = Produto { id: 0, nome: String::from("Teste"), preco: 10.0 }; assert_eq!(produto.nome, "Teste"); } }
Executando os Testes
Execute os testes criados para garantir que tudo funciona corretamente. Utilize o comando abaixo.
commandscargo test
Conclusão
Neste tutorial, você aprendeu a criar um microserviço robusto com Rust, usando Actix-web e Diesel para gerenciar a API e o banco de dados. Discutimos a configuração do ambiente, a criação do projeto, a implementação dos endpoints RESTful e a execução de testes unitários. Com essas habilidades, você está bem preparado para desenvolver microserviços escaláveis e eficientes em Rust, expandindo suas capacidades na construção de aplicações modernas.