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

  1. 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 --version

  2. Criaçã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.

    commands
    cargo new microservico
    cd microservico

  3. Adicionando 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"

  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.

    commands
    cargo install diesel_cli --no-default-features --features sqlite
    diesel setup

  5. Criando 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.

    commands
    diesel migration generate create_produtos
    cd migrations/{id}/up.sql

    migration_file
    CREATE TABLE produtos (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome TEXT NOT NULL,
        preco REAL NOT NULL
    );

  6. 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.rs
    use diesel::{Queryable, Insertable};
    
    #[derive(Queryable, Insertable)]
    #[table_name = "produtos"]
    pub struct Produto {
        pub id: i32,
        pub nome: String,
        pub preco: f64,
    }

  7. 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.rs
    use 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
    }

  8. 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`.

    commands
    cargo run

  9. 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");
        }
    }

  10. Executando os Testes

    Execute os testes criados para garantir que tudo funciona corretamente. Utilize o comando abaixo.

    commands
    cargo 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.

Hashtags

#Rust #ActixWeb #Diesel #Microserviços #API #DesenvolvimentoDeSoftware