maurienejunior / lazy-api
There is no license information available for the latest version (dev-master) of this package.
A generic api to helper lazy people like me
dev-master
2025-08-22 12:57 UTC
This package is auto-updated.
Last update: 2025-08-22 12:57:50 UTC
README
Visão Geral
O LazyAPI é um package Laravel que facilita a criação de APIs CRUD (Create, Read, Update, Delete) de forma rápida e padronizada. Ele fornece uma estrutura base que automatiza operações comuns de API, incluindo filtragem avançada, paginação, ordenação e exportação para Excel.
Estrutura do Package
Arquivos Principais
- LazyApiRoutes.php - Gerador de rotas CRUD básicas
- LazyApiControllerTrait.php - Trait com métodos padrão para controllers
- LazyApiService.php - Camada de serviço com lógica de negócio
- LazyApiRepository.php - Camada de acesso a dados
- LazyApiHttp.php - Respostas HTTP padronizadas
- LazyApiFile.php - Utilitários para manipulação de arquivos
- Excel.php - Exportação de dados para CSV
- LazyApiServiceProvider.php - Service Provider do package
Como Usar
1. Configuração de Rotas
use maurienejunior\lazyapi\LazyApiRoutes; // No arquivo de rotas (api.php ou web.php) LazyApiRoutes::basicApiWithPrefix('users', UserController::class);
Esta linha criará automaticamente as seguintes rotas:
GET /users
- Listar todos os usuáriosGET /users/{id}
- Buscar usuário por IDPOST /users
- Criar novo usuárioPOST /users/update
- Atualizar usuário (método POST)PUT /users
- Atualizar usuário (método PUT)DELETE /users/{id}
- Deletar usuário
2. Controller
use maurienejunior\lazyapi\LazyApiControllerTrait; class UserController extends Controller { use LazyApiControllerTrait; public function __construct(UserService $service) { parent::__construct($service); } }
3. Service
use maurienejunior\lazyapi\LazyApiService; class UserService extends LazyApiService { public function __construct(UserRepository $repository) { parent::__construct($repository); } // Métodos de validação e hooks personalizados public function validate($item) { // Implementar validações customizadas return null; // ou retornar mensagem de erro } public function modifyItensBeforeSave($item) { // Modificar dados antes de salvar return $item; } public function afterSave($obj, $item) { // Ações após salvar } }
4. Repository
use maurienejunior\lazyapi\LazyApiRepository; use App\Models\User; class UserRepository extends LazyApiRepository { protected $model = User::class; protected $primaryKey = 'id'; protected $paginate = true; protected $fieldsToSearch = [ ['field' => 'name', 'size' => 50], ['field' => 'email', 'size' => 100] ]; protected $fieldsToExport = [ 'id' => 'ID', 'name' => 'Nome', 'email' => 'E-mail', 'created_at' => 'Data de Criação' ]; protected $relationships = ['profile', 'posts']; }
Funcionalidades Avançadas
Filtragem de Dados
O LazyAPI suporta filtragem avançada através de parâmetros de query:
Operadores Básicos
GET /users?name=ilike|João
GET /users?age=>|18
GET /users?created_at=between|2023-01-01|2023-12-31
GET /users?status=whereIn|active,pending
Operadores Suportados
=
- Igual>
- Maior que<
- Menor que>=
- Maior ou igual<=
- Menor ou igual<>
- Diferenteilike
- Busca parcial (case insensitive)between
- Entre valoreswhereIn
- Dentro de uma lista
Filtragem por Relacionamentos
GET /users?profile|name=ilike|João
GET /posts?user|email=ilike|@gmail.com
Busca Geral
GET /users?search=João
Filtros OR
GET /users?name||email=ilike|João
Ordenação
GET /users?orderByAsc=name
GET /users?orderByDesc=created_at
GET /users?orderByAsc=profile|name // Ordenar por relacionamento
Paginação
GET /users?paginate=true®isterByPage=20
Seleção de Campos
GET /users?select=id,name,email
Relacionamentos
GET /users?withThisRelationships=profile,posts
GET /users?withoutThisRelationships=posts
Limitação de Resultados
GET /users?limit=10
Contagem
GET /users?count=true
Exportação para Excel
GET /users/excel
Respostas HTTP Padronizadas
O LazyApiHttp fornece respostas consistentes:
- 200 OK - Operação bem-sucedida
- 201 Created - Recurso criado
- 403 Forbidden - Erro de validação
- 404 Not Found - Recurso não encontrado
- 500 Internal Server Error - Erro interno
Formato das Respostas
// Sucesso { "data": {...}, "status": 200 } // Erro { "message": "Mensagem de erro", "devMsg": "Detalhes técnicos (apenas em desenvolvimento)" }
Hooks Disponíveis
O LazyApiService oferece vários hooks para customização:
validate($item)
- Validação antes de salvar/atualizarmodifyItensBeforeSave($item)
- Modificar dados antes de salvarmodifyItensBeforeUpdate($item)
- Modificar dados antes de atualizarafterSave($obj, $item)
- Ações após salvarafterUpdate($obj, $item)
- Ações após atualizarbeforeUpdate($item)
- Ações antes de atualizarbeforeDelete($id)
- Ações antes de deletarmodifyBeforeExport($data)
- Modificar dados antes de exportarmodifyData($data)
- Modificar query antes de executar
Instalação
- Registre o ServiceProvider no
config/app.php
:
'providers' => [ // ... maurienejunior\lazyapi\LazyApiServiceProvider::class, ],
Exemplo Completo
Model
class User extends Model { protected $fillable = ['name', 'email', 'password']; public function profile() { return $this->hasOne(Profile::class); } }
Repository
class UserRepository extends LazyApiRepository { protected $model = User::class; protected $fieldsToSearch = [ ['field' => 'name', 'size' => 100], ['field' => 'email', 'size' => 100] ]; protected $fieldsToExport = [ 'id' => 'ID', 'name' => 'Nome', 'email' => 'E-mail' ]; }
Service
class UserService extends LazyApiService { public function validate($item) { if (empty($item['name'])) { return 'Nome é obrigatório'; } return null; } }
Controller
class UserController extends Controller { use LazyApiControllerTrait; public function __construct(UserService $service) { parent::__construct($service); } }
Rotas
LazyApiRoutes::basicApiWithPrefix('users', UserController::class);
Com essa configuração, você terá uma API completa para gerenciar usuários com todas as funcionalidades do LazyAPI.
Vantagens
- Rapidez no desenvolvimento - Reduz drasticamente o tempo de criação de APIs CRUD
- Padronização - Mantém consistência entre diferentes endpoints
- Flexibilidade - Permite customização através de hooks
- Filtragem avançada - Sistema robusto de filtros e busca
- Exportação - Funcionalidade built-in para exportar dados
- Manutenibilidade - Código organizado em camadas bem definidas
Considerações
- O package é específico para Laravel
- Requer conhecimento básico de padrões Repository e Service
- Ideal para APIs que seguem padrões CRUD convencionais
- Pode necessitar customização para casos de uso muito específicos