Laravel 11 continua a ser uma das ferramentas mais poderosas para criar aplicações modernas, incluindo APIs robustas. Um dos recursos mais eficientes do framework é o API Resource, que oferece um controle avançado sobre como os dados são formatados antes de serem enviados como resposta JSON. Este artigo irá guiá-lo por todo o processo de criação de uma API Resource utilizando Laravel 11 e configurando um Resource como padrão de um Model.
O Que É um API Resource no Laravel?
O API Resource é uma classe no Laravel que transforma os dados de um model em um formato JSON padronizado. Ele permite formatar as respostas com consistência e restringir quais campos devem ser expostos. Usar um Resource como padrão em um Model garante que todos os dados retornados por esse Model sigam o mesmo formato.
Configurando o Projeto Laravel
Certifique-se de ter o Laravel instalado. Caso ainda não tenha, utilize o seguinte comando:
composer create-project laravel/laravel exemplo-api
Entre no diretório do projeto:
cd exemplo-api
Inicie o servidor local:
php artisan serve
Certifique-se de que o projeto está funcionando acessando http://127.0.0.1:8000.
Criando o Model e a Migration
Vamos criar um exemplo de API para gerenciar Produtos. Execute o comando para gerar o Model com uma Migration:
php artisan make:model Produto -m
No arquivo de migration gerado (database/migrations/xxxx_xx_xx_xxxxxx_create_produtos_table.php), defina os campos da tabela:
public function up()
{
Schema::create('produtos', function (Blueprint $table) {
$table->id();
$table->string('nome');
$table->decimal('preco', 8, 2);
$table->integer('estoque');
$table->timestamps();
});
}
Execute a migration para criar a tabela no banco de dados:
php artisan migrate
Adicione o preenchimento de massa no Model Produto.php:
protected $fillable = ['nome', 'preco', 'estoque'];
Criando o Resource
Crie um Resource para formatar os dados do Model:
php artisan make:resource ProdutoResource
O arquivo ProdutoResource.php será criado no diretório app/Http/Resources. Edite-o para definir como os dados serão formatados:
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class ProdutoResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'nome' => $this->nome,
'preco' => number_format($this->preco, 2, ',', '.'),
'estoque' => $this->estoque,
'criado_em' => $this->created_at->toDateTimeString(),
'atualizado_em' => $this->updated_at->toDateTimeString(),
];
}
}
Criando o Controller
Crie um controller resource para gerenciar os dados:
php artisan make:controller ProdutoController --resource
No arquivo ProdutoController.php, configure os métodos para usar o ProdutoResource.
Listar Todos os Produtos (index):
public function index()
{
$produtos = Produto::all();
return ProdutoResource::collection($produtos);
}
Criar um Novo Produto (store):
public function store(Request $request)
{
$request->validate([
'nome' => 'required|string|max:255',
'preco' => 'required|numeric',
'estoque' => 'required|integer',
]);
$produto = Produto::create($request->all());
return new ProdutoResource($produto);
}
Exibir um Produto Específico (show):
public function show(Produto $produto)
{
return new ProdutoResource($produto);
}
Atualizar um Produto (update):
public function update(Request $request, Produto $produto)
{
$produto->update($request->all());
return new ProdutoResource($produto);
}
Deletar um Produto (destroy):
public function destroy(Produto $produto)
{
$produto->delete();
return response()->json(['message' => 'Produto deletado com sucesso'], 200);
}
Configurando as Rotas
Abra o arquivo routes/api.php e registre as rotas utilizando o resource controller:
use App\Http\Controllers\ProdutoController;
Route::apiResource('produtos', ProdutoController::class);
Configurando o Resource como Padrão do Model
Você pode configurar o Resource como a resposta padrão do Model utilizando o método toResponse() no Model:
use App\Http\Resources\ProdutoResource;
public function toResponse($request)
{
return new ProdutoResource($this);
}
Com o uso do API Resource no Laravel 11, você pode criar APIs organizadas, escaláveis e com respostas consistentes. Configurar o Resource como padrão no Model garante que qualquer retorno do Model seja sempre formatado adequadamente, aumentando a confiabilidade da API.