Lumen é um projeto recente do criador do Laravel, Taylor Otwell. É um microframework, e como o nome já implica, uma versão menor, mais rápida e enxuta de um framework completo. Este é o primeiro post de uma série onde trarei breves exemplos de como utilizar cada um destes microframeworks para você poder utilizar nos seus projetos.

Uma breve introdução ao Lumen

O Lumen possui a mesma base do Laravel, e muitos dos mesmos componentes. Mas o Lumen foi feito para microserviços, e não tanto para aplicações frontend que se valem de interações com o usuário (embora ele possa ser utilizado para qualquer coisa). Sendo assim, os recursos bacanas de frontend que estamos acostumados como Bootstrap, Elixir e os componentes de autenticação e sessão não vem disponíveis por padrão. Também existem poucas possibilidades de estender ou de alterar os arquivos de inicialização do microframework (bootstrap).

Slim e Silex são outros exemplos de microframeworks PHP similares ao Lumen.

Para que serve?

O Lumen foi feito para projetos e componentes que poderiam se beneficiar da conveniencia e poder do Laravel mas que ao mesmo tempo podem abrir mão de alguma flexibilidade e de alguns recursos em troca de um incremento considerável de velocidade.

O alvo do Lumen, como já mencionei, são os microserviços — componentes pequenos e pouco engessados que geralmente servem como suporte e/ou melhorias dentro do ecossistema de um projeto. Microserviços são componentes independentes porém com um contexto limitado (significa que possuem interfaces bem definidas entre eles). Dentro da arquitetura de um microserviço você poderia ter diversos mini apps Lumen que apóiam um app principal, possivelmente feito em Laravel.

Um exemplo prático

Não quero falar sobre microserviços E Lumen ao mesmo tempo, então para podermos manter o foco, vou mostrar como criar uma simples camada de cache que poderia ser acoplada a um serviço externo que talvez seja muito lerdo e possui baixíssima disponibilidade. Eu trabalho frequentemente com fontes de dados externas, como APIs, que precisam ser armazenadas em cache. Então eu costumo montar pequenos apps com funções bem específicas que ficam no meio entre a fonte de dados e o meu código que será consumido.

Eu poderia desenvolver um app totalmente em Laravel, o que também seria ótimo, o problema é que o Laravel vem com um monte de código e componentes extras que são desnecessários para um microserviço, como neste exemplo do mini app de cache que faremos. Então vamos criar um usando o Lumen!

Caching

Uma maneira simples de arquitetar uma camada de cache é planejar o roteamento de todas as chamadas para esta camada, armazenar os resultados em cache, e servir os dados a partir do cache. Simples assim.

Instalando o Lumen

Obs: Para seguir este tutorial você precisará do composer instalado.

O Lumen possui um instalador simples assim como o do Laravel. Você pode configura-lo como global, inclusive:

Agora você pode executar o comando lumen new MeuProjeto e ele irá criar uma pasta com um projeto Lumen dentro pra você.

Muito bem, estamos dentro da nossa instalação do Lumen. Se você possui o artisan instalado, pode verificar com o comando php artisan para saber quais comandos temos a disposição, ou php artisan serve para iniciar um servidor web no localhost:8000 que está servindo sua aplicação web.

Agora o que eu preciso é que todas as chamadas passem diretamente por ele.

Ativando .env e facades

No Laravel, tudo funciona praticamente sozinho. No Lumen também, mas você talvez queira dar uma olhada no arquivo bootstrap/app.php. Existem algumas opções que você pode habilitar aqui – você os encontrará com linhas comentadas. Para ativa-las basta descomenta-las.

Como eu quero usar as facades do Laravel e as variáveis do arquivo .env, eu vou descomentar estas duas linhas:

Você pode procurar neste arquivo, se quiser, e encontrar as linhas que irão habilitar o Eloquent, rotas, middlewares globais e service providers.

Capturando as rotas

O próximo passo é ir até app/Http/routes.php. Perceba que as rotas no Lumen utilizam a nikic/FastRoute ao invés do Illuminate Router, então as coisas irão parecer um pouco diferentes.

Vamos criar uma rota que irá capturar todas as chamadas que passarem por ela.

Se você estiver familiarizado com o Laravel, talvez notou que a rota acima no Laravel seria algo do tipo:

Mas essencialmente nós estamos capturando cada path e passando cada um deles para a variável $path.

Chamada da API

Agora já podemos configurar nossa chamada da API. Pule os dois próximos parágrafos se você não se importa com a chamada da API — não é necessariamente obrigatório entender este exemplo.

Eu estou usando uma classe PassThrough genérica que é construída com uma URL base (ex: http://api.fabimingorance.com.br/v1), possui um método getResultsForPath que recebe um path (ex: post/73), e por fim retorna um array com headers, body, e status.

Estamos definindo quais headers nós queremos ou não receber; a URL raiz para a chamada da nossa API; então passamos o path para a chamada, recebemos uma resposta, e com esta resposta criamos uma instância do Illuminate response  usando o helper do Laravel response(), que recebe os parametros body, status, headers.

Perceba que utilizo a instância do $app pelo código, assim podemos obter novos objetos fora do container do IOC.

Caching

Finalmente, vamos armazenar os resultados em cache e nosso mini app estará pronto.

E é isso! Acabamos de criar um rápido mecanismo de cache que pode ser implantado em qualquer website.

Outras idéias

Este é um caso bem simples de utilização do Lumen na prática. O Lumen é voltado para microserviços, então é mais provável que você o utilize quando precisar separar uma pequena parte da sua aplicação que irá realizar uma função de alto nível. Ela pode se tornar um servidor de API, por exemplo. Ou poderá coletar dados de múltiplos locais, trata-los e servi-los da uma maneira padronizada. As possibilidades são imensas. Se o seu componente precisa ser independente e único, e especialmente se possuir muito tráfego, vale a pena tentar desenvolver um utilizando o Lumen.

Conclusão

Lumen é o Laravel depois da cirurgia de estômago. O foco é na velocidade. Não se importa com views e sessões – é otimizado para microserviços enxutos e velozes. Pesquise também a documentação oficial para mais uma tonelada de informações sobre como utilizar o Lumen.

Até a próxima, com mais um artigo sobre outro microframework PHP!

Fabio Ferreira on EmailFabio Ferreira on InstagramFabio Ferreira on Twitter
Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.


Author: Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Instagram did not return any images.

Siga também nosso Instagram!