Desenvolva uma API REST em PHP para gerenciamento de produtos com relacionamento a categorias. O projeto deve implementar um CRUD completo seguindo os contratos de API especificados neste documento.
CREATE TABLE `categorias` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`titulo` VARCHAR(190) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `categorias` (`id`, `titulo`) VALUES (4, 'Alimentos');
INSERT INTO `categorias` (`id`, `titulo`) VALUES (5, 'Informática');
INSERT INTO `categorias` (`id`, `titulo`) VALUES (2, 'Eletrodomésticos');
INSERT INTO `categorias` (`id`, `titulo`) VALUES (3, 'Celulares');CREATE TABLE `produtos` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`categoria_id` INT(11) NOT NULL,
`nome` VARCHAR(255) NOT NULL,
`preco` DECIMAL(10,2) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`categoria_id`) REFERENCES `categorias`(`id`) ON DELETE RESTRICT
) ENGINE=InnoDB;- Listar todos os produtos
- Criar novo produto
- Editar produto existente
- Excluir produto
- CRUD completo para produtos
- Relacionamento com categorias
- Validação de dados
- Tratamento de erros
Todas as APIs devem retornar respostas no seguinte formato padrão:
{
"error": false,
"messages": ["Sucesso"],
"results": []
}- error: Boolean indicando se houve erro
- messages: Array com mensagens de feedback
- results: Array com os dados retornados
- Método: GET
- URL:
/api/produtos - Resposta de Sucesso:
{
"error": false,
"messages": ["Produtos listados com sucesso"],
"results": [
{
"id": 1,
"categoria_id": 4,
"nome": "Arroz Integral",
"preco": "15.99",
"categoria": {
"id": 4,
"titulo": "Alimentos"
}
}
]
}- Método: GET
- URL:
/api/produtos/{id} - Resposta de Sucesso:
{
"error": false,
"messages": ["Produto encontrado"],
"results": {
"id": 1,
"categoria_id": 4,
"nome": "Arroz Integral",
"preco": "15.99",
"categoria": {
"id": 4,
"titulo": "Alimentos"
}
}
}- Método: POST
- URL:
/api/produtos - Body:
{
"categoria_id": 4,
"nome": "Feijão Preto",
"preco": 8.5
}- Resposta de Sucesso:
{
"error": false,
"messages": ["Produto criado com sucesso"],
"results": {
"id": 2,
"categoria_id": 4,
"nome": "Feijão Preto",
"preco": "8.50"
}
}- Método: PUT
- URL:
/api/produtos/{id} - Body:
{
"categoria_id": 5,
"nome": "Notebook Dell",
"preco": 2500.0
}- Resposta de Sucesso:
{
"error": false,
"messages": ["Produto atualizado com sucesso"],
"results": {
"id": 1,
"categoria_id": 5,
"nome": "Notebook Dell",
"preco": "2500.00"
}
}- Método: DELETE
- URL:
/api/produtos/{id} - Resposta de Sucesso:
{
"error": false,
"messages": ["Produto excluído com sucesso"],
"results": []
}- Método: GET
- URL:
/api/categorias - Resposta de Sucesso:
{
"error": false,
"messages": ["Categorias listadas com sucesso"],
"results": [
{
"id": 4,
"titulo": "Alimentos"
},
{
"id": 5,
"titulo": "Informática"
}
]
}{
"error": true,
"messages": ["Produto não encontrado"],
"results": []
}{
"error": true,
"messages": [
"O campo nome é obrigatório",
"O campo preço deve ser um número válido"
],
"results": []
}{
"error": true,
"messages": ["Categoria não encontrada"],
"results": []
}{
"error": true,
"messages": ["Erro interno do servidor"],
"results": []
}- api/: Código fonte da API
- database/: Scripts SQL das tabelas
- README.md: Instruções de instalação e uso
- frontend/: Tela de cadastro (opcional)
Inclua no README.md:
- Requisitos do sistema
- Configuração do banco de dados
- Como executar o projeto
- PHP: Versão 7.4 ou superior
- MySQL: Para banco de dados
- Composer: Gerenciador de dependências (opcional)
- Implementar filtros de busca
- Criar documentação da API
- Adicionar logs de requisições
- Após finalizar nos envie o link do seu repositório para o e-mail contato@bredi.com.br juntamente com seu nome, não esqueca de deixar o repositório público.
Boa sorte com o desenvolvimento! 🚀