Publicado por Dalto Curvelano em 11 de November de 2009

21 Middlewares Rack Para Turbinar Sua Aplicação Rails

rack-logo.pngSe você já trabalhou com aplicações web feitas em Ruby, deve conhecer o Rack, uma interface que fica entre as aplicações Ruby e servidores web baseados em HTTP. Atualmente, todos os principais frameworks e servers Ruby utilizam o Rack, incluindo o Rails. Middleware (no Rack) é a parte do sistema que manipula dados trocados entre suas aplicações Ruby e o servidor HTTP. Você pode usá-los para interceptar requisições, alterar dados entre o seu fluxo, etc. Se o conceito é novo para você ou quer construir seu próprio middleware, dê uma olhada no ótimo tutorial em formato de screencast feito pelo Ryan Bates.

P.S. Nós sabemos que o termo "middleware" soa bem esquisito, mas funciona.. você sabe o que significa! ;-)

Neste post, destacamos vários middlewares Rack do CodeRack, uma competição de criação de middlewares que aconteceu mês passado:

Karma Chameleon - Pensado para desenvolvedores Rails, o Karma Chameleon torna fácil adicionar extensões de arquivos às URLs da sua aplicação. A motivação bem-humorada para isso é que você pode ter todas as suas páginas usando extensões ".aspx" ou ".php" para que elas apareçam "mais aceitáveis" em ambientes corporativos. Piadinhas à parte, este é um middleware muito bem escrito que vale a pena dar uma olhada.

Rack::Rewrite - Este middleware é uma tentativa esperta de implementar parte da funcionalidade do módulo mod_rewrite do servidor Apache. Até agora ele oferece suporte para fazer reescritas básicas (onde URLs são alteradas no meio da requisição, antes de fazerem chamadas ao backend) e redirecionamentos HTTP 301 e 302.

Canonical Host - Este middleware deixa você especificar um "nome de host canônico" para sua aplicação para que quaisquer requisições para outros nomes de hosts sejam redirecionadas para uma mesma URL no nome de host canônico.

Rack::Tidy - Rack::Tidy limpa seu HTML, identando e formatando conteúdo automaticamente. Se você quer que o código html gerado por suas aplicações fiquem limpos, (principalmente se você está usando o Erb!) vale a pena dar uma olhada, embora ele só funcione com html válido.

Zombie Shotgun - A Escopeta Zumbi provê proteção contra ataques tipo zumbi do Windows! Ela recusa requisições de user agents "do mal" e de URLs maliciosas. Eu me arrisco a dizer que esse middleware é útil para praticamente qualquer coisa.

ImageSizer - Este middleware adiciona informações ao cabeçalho das respostas HTTP ao servir imagens que contém informações quanto às suas dimensões. Ele funciona para imagens criadas dinâmica e estáticamente, uma vez que ele roda depois que o seu código já forneceu a imagem.

Firebug Logger - Adiciona logs à sua aplicação baseada em Rack que podem ser utilizados pelo Firebug do Firefox ou com o inspetor do Webkit/Safari.

EnforceSSL - O middleware EnforceSSL permite que você se certifique que certas URLs só sejam acessadas de maneira segura, utilizando HTTP/SSL. Se uma URL marcada pelo middleware é requerida por meio de HTTP padrão, um redirecionamento HTTP 307 será retornado (a propósito, eu não conhecia o HTTP 307 até agora - vale a pena ler sobre ele).

InlineUploader - Este middleware se vende por si mesmo! "Precisa de uploads 'inline' para arquivos iguais aos anexos do Gmail? O InlineUploader vai te ajudar! Ele provê um endpoint genérico para upload de arquivos que serão enviados junto com formulário de dados."

RefererControl - Um middleware que restringe acesso à algumas URLs se baseando no cabeçalho Referer (que diz de qual URL a requisição foi feita) . Ao invés de bloquear as pessoas que não rem o Referer, este middleware foi projetado para "forçar" alguns referrers para que usuários sigam o fluxo de navegação desejado de um site.

Rack::GoogleAnalytics - Rack::GoogleAnalytics automaticamente adiciona código de rastreamento do Google Analytics no HTML das páginas das suas aplicações. Um middleware muito simples com código também simples, (o que o coloca em destaque se você quer tentar escrever um middleware básico), embora não esteja certo de que o lugar certo para esta funcionalidade seja num middleware...

Rack::NoIE - Este middleware se auto descreve como "o middleware de Rack mais legal já criado". Não tenho tanta certeza disto, mas o que ele faz é redirecionar usuários do Internet Explorer 6 para longe do seu site. Supostamente o próprio site do CodeRack usa este middleware!

BanHammer - Uma aplicação middleware bem simples que restringe acesso a endereços e intervalos de IPv4/v6 especificados.

Rack::Codehighlighter - Este middleware automaticamente aplica um code highlighter (você pode escolher entre CodeRay, Syntax, e Ultraviolet) a qualquer código fonte embutido entre tags PRE nas suas páginas HTML. Isto pode ser particularmente útil se você usa uma ferramenta de blog escrita em Ruby que não tem essa funcionalidade.

Response Time Injector - Quer obter o tempo de resposta da sua aplicação em algum lugar do corpo do seu HTML gerado? Este middleware substitiu qualquer referencia à string "$responsetime" no corpo da sua resposta pelo total de tempo gasto na resposta. O que pode ser particularmente útil para depuração. Ele até deixa que você especifique uma formatação para o tempo mostrado.

Probably Versioned - Um middleware por Dr Nic Williams! Ele possibilita a adição de um código de versão às URLs/rotas da sua aplicação sem afetá-la diretamente, por exemplo, www.example.com/v1/some/path.json - Porém, como Nic explica, está é uma tática de prevenção para garantir aos seus usuários URLs a prova de mudanças futuras, ao invés de uma referência fixa sem versão, assim você não fica na mão quando a versão for para 2.0 ;-)

Rack::Proxy - Provê funcionalidades de proxy. Por exemplo, você pode repassar chamadas de API remotas através do esquema de URLs da sua aplicação. Este é um dos middlewares que poderá se tornar bem importante com boas extensões.

Server Proxy - Pelo nome, Server Proxy soa similar ao Rack::Proxy, mas ele é específico para ultrapassar restrições de acesso entre domínios (ao se utilizar AJAX, por exemplo). Ele oferece uma maneira simples de passar requests a APIs remotas através do seu site, por exemplo, http://localhost:3000/server_proxy?service_url=twitter.com&service_path=statuses/public_timeline.xml - entretanto, você precisa se precaver das complicações de segurança que isto pode trazer!

Casrack the Authentication - Um middleware que oferece suporte a autenticação CAS (Central Authentication Service). CAS é um sistema de autenticação centralizado inicialmente desenvolvido pela Universisade de Yale. Não conheço o CAS mas me parece que esse middleware foi bem montado para resolver um problema específico. Nota: Você precisa usar o Gemcutter para instalá-lo como gem, mas o código está disponível no GitHub também.

Rack::ChromeFrame - Recentemente o Google lançou um plugin para o Internet Explorer que oferece as funcionalidades do Google Chrome para o IE no Windows. Este middleware faz com que as páginas servidas exigam o uso do Google Chrome Frame em browsers compatíveis.

Rakismet - Rakismet pode direcionar comentários ao seu site que foram recebidos através do inspetor de spams Akismet. Este middleware ainda não tem documentação, mas o código é um bom exemplo de como interagir com o Askimet que pode ser útil até mesmo para quem não usa o middleware.

2 Comentários para “21 Middlewares Rack Para Turbinar Sua Aplicação Rails”

  1. #1
    Tweets that mention 21 Middlewares Rack Para Turbinar Sua Aplicação Rails -- Topsy.com Disse:

    [...] This post was mentioned on Twitter by Ruby Inside Brasil and Carlan Calazans, Igor Bozato. Igor Bozato said: RT @rubyinside_br: 21 Middlewares Rack Para Turbinar Sua Aplicação Rails http://bit.ly/ZnmGv [...]

  2. #2
    Roger Leite Disse:

    Tem também o:

    Devise is a flexible authentication solution for Rails based on Warden.
    http://github.com/plataformatec/devise

Deixe um Comentário