Um sistema completo de gerenciamento de produtos (CRUD) com interface Web e API RESTful, construído com PHP 8 Puro, sem o uso de frameworks.
Este projeto foi desenvolvido como um desafio de arquitetura de software, implementando manualmente conceitos avançados como MVC, Roteamento Personalizado, Repository Pattern e Injeção de Dependência Manual.
Demonstração dos endpoints funcionando (testes realizados via Thunder Client):
| Listar Produtos | Detalhes do Produto |
|---|---|
![]() |
![]() |
| Criar Produto | Atualizar Produto |
|---|---|
![]() |
![]() |
| Deletar Produto |
|---|
![]() |
O projeto segue estritamente o padrão MVC (Model-View-Controller) com separação de responsabilidades.
- Linguagem: PHP 8+
- Banco de Dados: MySQL (PDO)
- Gerenciador de Dependências: Composer (Autoload PSR-4)
- Frontend: HTML5 e CSS3 Puro
- Arquitetura:
- Core: Router personalizado (
Router.php) e Conexão Singleton (Database.php). - Controllers: Separados em
Web(retorna HTML) eAPI(retorna JSON). - Models: Camada de dados e regras de negócio.
- Views: Interface do usuário limpa.
- Core: Router personalizado (
Siga os passos abaixo para rodar a aplicação em sua máquina local.
git clone https://github.com/SEU_USUARIO/NOME_DO_REPO.git
cd NOME_DO_REPOCertifique-se de ter o Composer instalado.
composer install- Crie um banco de dados MySQL chamado
loja. - Importe o script SQL de criação das tabelas localizado em:
core/database/schema.sql - Abra o arquivo de configuração e insira suas credenciais do MySQL (usuário e senha):
core/Database.php
Rode o comando abaixo na raiz do projeto para iniciar o servidor do PHP:
php -S localhost:8000 -t public- Website (Interface): http://localhost:8000
A API aceita e retorna dados em formato JSON. Você pode testar usando Postman, Thunder Client ou Insomnia.
| Método | Endpoint | Descrição | Exemplo de Body (JSON) |
|---|---|---|---|
| GET | /api/produtos |
Lista todos os produtos | N/A |
| GET | /api/produto?id=1 |
Exibe um produto específico | N/A |
| POST | /api/produto/create |
Cria um novo produto | {"nome": "TV", "preco": 1000, "categoria": 1} |
| PUT | /api/produto/update?id=1 |
Atualiza um produto | {"nome": "TV 4K", "preco": 1200} |
| DELETE | /api/produto/delete?id=1 |
Remove um produto | N/A |
Desenvolvido por Gabriel Vinicius de Oliveira.




