3 pontos por GN⁺ 2024-10-23 | 1 comentários | Compartilhar no WhatsApp
  • Rwf é um framework abrangente para criar aplicações web em Rust
  • Foi escrito usando o padrão clássico MVC (model-view-controller) e já oferece por padrão tudo o que é necessário para criar apps web rápidos e seguros com facilidade

Visão geral dos recursos

  • Servidor HTTP
  • ORM amigável para escrever consultas PostgreSQL com facilidade
  • Templates dinâmicos
  • Autenticação e sessões de usuário integradas
  • Middleware
  • Tarefas em segundo plano e tarefas agendadas
  • Migrações de banco de dados
  • Framework REST integrado com suporte a serialização JSON
  • Suporte a WebSockets
  • Hospedagem de arquivos estáticos
  • Integração estreita com Hotwired Turbo para criar SPAs conduzidas pelo backend
  • Configuração por ambiente
  • Logging e métricas
  • CLI
  • Servidor WSGI para migrar de apps Django/Flask

Início rápido

  • Para adicionar o Rwf à stack, crie uma aplicação binária em Rust e adicione rwf e tokio às dependências:
cargo add rwf  
cargo add tokio@1 --features full  
  • Criar o app é tão simples quanto isto:
use rwf::prelude::*;  
use rwf::http::Server;  
  
#[derive(Default)]  
struct IndexController;  
  
#[async_trait]  
impl Controller for IndexController {  
    async fn handle(&self, request: &Request) -> Result {  
        Ok(Response::new().html("Hey Rwf!"))  
    }  
}  
  
#[tokio::main]  
async fn main() {  
    Server::new(vec![  
        route!("/" => IndexController),  
    ])  
    .launch("0.0.0.0:8000")  
    .await  
    .unwrap();  
}  

Status

  • O Rwf está em estágio inicial de desenvolvimento e ainda não está pronto para produção. Muitos recursos e a documentação ainda estão incompletos.

Resumo do GN⁺

  • Rwf é um framework robusto para criar aplicações web em Rust e oferece vários recursos para desenvolver apps web rápidos e seguros com facilidade usando o padrão MVC.
  • Como ainda está em estágio inicial de desenvolvimento, pode ser difícil usá-lo em ambientes de produção, mas vários recursos e a documentação devem continuar sendo atualizados.
  • Pode ser útil para desenvolvedores que querem criar aplicações web com Rust e também para quem está considerando migrar de frameworks existentes como Django ou Flask.
  • Outros frameworks web em Rust com recursos semelhantes incluem Actix e Rocket.

1 comentários

 
GN⁺ 2024-10-23
Comentários no Hacker News
  • Enfatiza que usar a biblioteca padrão da linguagem Go reduz a dependência de frameworks web complexos, aumenta a segurança e facilita a manutenção

    • Aponta que, no Rust, frameworks web ainda podem ser úteis
  • A partir da experiência com frameworks web MVC, tirou a lição de que a lógica de negócio não deve ficar na camada de modelo

    • Recomenda fortemente uma camada de serviço e sugere implementá-la como objetos de comando usando gems como Interactor
  • Espera que frameworks REST sejam capazes de gerar definições Swagger automaticamente

    • Questiona por que foi desenvolvido algo próprio em vez de usar um ORM ou mecanismo de templates já existente
  • Avalia que escolher o nome de um novo framework é uma boa forma de aparecer no topo dos resultados de busca

    • Menciona que é importante explorar novas ideias
  • Demonstra interesse em migrar de Python para Rust

    • Sugere que, em grande escala, isso deveria ser tratado com um Reverse Proxy
  • Alerta que incluir um ORM como recurso nativo de um framework web pode parecer razoável no início, mas, com o tempo, ele pode acabar virando um projeto independente ou surgir a vontade de usar outro ORM

  • Menciona que são necessários mais frameworks com opiniões fortes, como Rails e Django

  • Expressa expectativa pelo lançamento de um framework que preencha uma lacuna importante no ecossistema Rust

  • Diz que percebeu o valor do MVC por meio da experiência de desenvolvimento com Django e que vai dar uma olhada no novo framework

  • Após avaliar vários frameworks para trabalho de backend em Rust, conclui que o Axum é o mais adequado

    • Avalia que o novo framework atende perfeitamente ao critério de "baterias incluídas, mas sem ser prescritivo demais"