Este projeto é uma API REST completa desenvolvida em PHP puro com PostgreSQL, totalmente funcional sem o uso do Composer, com autenticação via JWT (JSON Web Tokens) e suporte para múltiplos usuários.
- PHP 8.2 (modo embutido via
php -S) - PostgreSQL 15
- JWT (implementado manualmente, sem Composer)
- Docker e Docker Compose
- DBeaver (sugerido para visualização do banco de dados)
- PGAdmin (opcional via
phpmyadmin/pgadmin4container) - Sessões PHP (
$_SESSION)
rest-api-php/
├── config/ # Configuração da conexão com o banco de dados
├── controllers/ # Lógica dos endpoints (UserController, AuthController)
├── models/ # Modelo User (com persistência no PostgreSQL)
├── routes/ # Roteamento principal
├── middleware/ # Validação do token JWT
├── utils/ # Funções auxiliares (JWT manual)
├── sql/init.sql # Script para criar e popular o banco
├── Dockerfile # Build do container PHP
├── docker-compose.yml # Orquestração dos containers
└── index.php # Ponto de entrada principal
- Docker + Docker Compose
git clone https://github.com/GabrielMassara/SafeAPI.git
cd SafeAPIdocker-compose up --buildA API estará disponível em:
📍 http://localhost:8000
Autentica o usuário e retorna um token JWT.
Body JSON:
{
"email": "admin@example.com",
"password": "123456"
}Resposta:
{
"token": "eyJhbGciOi..."
}Finaliza a sessão PHP do usuário.
Resposta:
{
"message": "Sessão encerrada com sucesso."
}Ao fazer login, o backend armazena os dados do usuário em $_SESSION['user'].
Use GET /api/me para acessar:
{
"id": 1,
"name": "Admin",
"email": "admin@example.com"
}📌 Cadastro de novo usuário (sem autenticação)
{
"name": "Maria",
"email": "maria@example.com",
"password": "senha123"
}🔐 Listar todos os usuários (requer token)
Authorization: Bearer SEU_TOKEN🔐 Obter usuário por ID
🔐 Atualizar usuário
{
"name": "Novo Nome",
"email": "novo@email.com"
}🔐 Excluir usuário
- Os tokens JWT são gerados no login.
- Enviados no cabeçalho de cada requisição autenticada:
Authorization: Bearer SEU_TOKEN_AQUI- Tempo de expiração: 1 hora
- Validação feita manualmente via HMAC-SHA256
curl -X POST http://localhost:8000/api/users -H "Content-Type: application/json" -d '{"name": "Gabriel", "email": "gabriel@exemplo.com", "password": "123456"}'curl -X POST http://localhost:8000/api/login -H "Content-Type: application/json" -d '{"email": "gabriel@exemplo.com", "password": "123456"}'curl http://localhost:8000/api/users -H "Authorization: Bearer SEU_TOKEN_AQUI"Você pode acessar o banco via DBeaver ou PGAdmin:
| Campo | Valor |
|---|---|
| Host | localhost |
| Porta | 5432 |
| Banco | meubanco |
| Usuário | meuusuario |
| Senha | senhasegura |
Certifique-se de que a porta 5432 está mapeada no
docker-compose.yml.
- Campos obrigatórios são validados no backend
- Mensagens de erro são retornadas em JSON com os códigos HTTP corretos:
400Campos ausentes401Não autenticado409E-mail duplicado404Usuário não encontrado
- Este projeto é ideal como base para APIs em PHP simples e seguras
- JWT é implementado manualmente, sem bibliotecas externas
- Pode ser facilmente estendido para incluir controle de permissões, logs, e-mail de recuperação, etc.
Desenvolvido por Gabriel Evangelista Massara