Desenvolvi recentemente um API com Laravel para um mini-projecto de alguns amigos e trabalhei nele. Decidi construir outro API mas com Lumen, uma vez que é uma estrutura muito mais leve e rápida que Laravel.
Lumen é uma microestrutura construída em cima dos componentes principais de Laravel. O Lumen utiliza muitos conceitos familiares da Laravel como Eloquent, caching, routing, middleware e o seu contentor de serviço. Uma grande vantagem do Lumen é a sua velocidade, como resultado o framework é projetado para construir micro-serviços rápidos ou APIs.
Embora este tutorial seja sobre o Lumen, um simples entendimento de como o Laravel funciona é tudo o que você precisa seguir.
Existem várias formas de configurar o Lumen localmente. Para o bem deste tutorial, nós o faremos através de composer
. Você pode conferir outras maneiras de configurar o Lumen aqui.
Do seu terminal, execute: composer create-project — prefer-dist laravel/lumen lumen_api
Isto irá instalar o Lumen e todas as dependências para você no diretório lumen_api
. A seguir, vamos renomear o arquivo.env.example
localizado no diretório root
para .env
O driver padrão do Lumen cache
como em 5.4 é memcached,
mas não vamos precisar disso para este tutorial. No entanto, qualquer um dos seguintes, array
database
e redis
são suportados. Edite o arquivo .env
e substitua o padrão CACHE_DRIVER
e QUEUE_DRIVER
pelos seguintes valores:
CACHE_DRIVER=array
QUEUE_DRIVER=database
Para servir nosso projeto localmente, podemos fazer uso do servidor do PHP construído executando o seguinte comando:php -S localhost:8000 -t public
Visit localhost:8000
em seu navegador e você deve ver a seguinte página.
O que vamos construir
Estaremos construindo uma API REST simples que lê e atualiza as tarefas de Criar, Ler, Atualizar e Excluir para um arquivo product resource
. Vamos dar uma olhada no nosso recurso endpoints
- GET /product/{id} – Buscar todo o recurso do produto
- POST /products- Criar um novo recurso do produto
- GET /product/{id} – Buscar um recurso do produto por id
- PUT /product/{id} – Atualizar um recurso do produto por id
- DELETE /product/{id}- Apagar um recurso do produto por id
Base de dados e Migrações
Vamos criar o nosso ficheiro de migração. Execute o seguinte comando:php artisan make:migration create_products_table
Isto irá criar um novo arquivo de migração para você no diretório database/migrations
. Nosso product resource
terá os seguintes atributos, name
, price
e description
.
Adicionar o seguinte código ao arquivo de migração recém criado.
Editar .env
com suas configurações database
e então executar o seguinte comando para executar a migração. php artisan migrate
Criar o nosso Modelo de Produto
Você já pode estar acostumado a criar os comandos models
e controllers
via artisan
em Laravel, mas infelizmente o Lumen não suporta esses comandos. Para ver uma lista de comandos disponíveis artisan
no Lumen, execute:php artisan
Navigate para o diretório app
e crie um novo model
chamado Product.php
Unlike Laravel, Lumen não carrega inicialmente Eloquent e Facades. Para poder usá-las, temos que descomentar as seguintes linhas de código localizadas em app\bootstrap.php
$app->withFacades();
$app->withEloquent();
Métodos Controladores
Vamos criar o nosso controller
. Navegue até o diretório app\Http\Controller
e crie um arquivo ProductController.php
. Adicione o seguinte código ao controller
que acabou de criar.
-
index
método retorna todos os produtos disponíveis como umJSON
resposta. -
create
método cria um novoproduct
e retorna o recém criadoproduct
como umJSON
resposta. -
show
método retorna um único recurso de produto pelo seuid
. Isto também é retornado como umJSON
resposta. -
update
método atualiza um único recurso de produto pelo seuid
também. -
delete
método elimina um recurso de produto pelo seuid
e retorna umsuccess
mensagem.
Roteiros
É hora de finalmente adicionar o nosso routes
. Abra o ficheiro web.php
na pasta routes
e adicione o seguinte código:
Definimos o nosso routes
e adicionamos o prefix
api/v1
uma vez que é um parâmetro comum partilhado por todos os nossos URIs
Tip: Faça uso do Prefixo para especificar parâmetros comuns para suas rotas agrupadas
Localizar nossa Base de Dados
Antes de começarmos a testar nosso endpoints
, vamos criar alguns dados de amostra para trabalhar. Comecemos por criar o nosso seed
. Execute:php artisan make:seed ProductsTableSeeder
Isto irá criar um arquivo ProductsTableSeeder.php
no diretório database/seeds
. Edite o arquivo com o seguinte código:
Next, edite o arquivo DatabaseSeeder.php
no diretório database\seeds
com o seguinte código:
Estaremos fazendo uso da Fábrica de Modelos de Laravel e da Biblioteca Faker para gerar os dados de amostra. Navegue até o diretório database\factories
e adicione o seguinte código ao arquivo ModelFactory.php
.
Next, execute:php artisan db:seed
Esta ação criará um monte de dados fictícios para nós no nosso database
.
Testando nossa API
Estaremos fazendo uso do Postman para testar nossa API. Você pode ler mais sobre como começar com o Postman aqui.