Criando uma API Resource Usando Laravel 11

Criando uma API Resource Usando Laravel 11

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.

Comments

No comments yet. Why don’t you start the discussion?

Deixe um comentário

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