Este projeto foi desenvolvido para aprofundar conhecimento em:
- Arquitetura em camadas (services pattern)
- Processamento assíncrono com filas
- Organização desacoplada de responsabilidades
- Estrutura preparada para escalabilidade
Serviço de encurtamento de URLs desenvolvido em Python/Django com foco em boas práticas de backend, tarefas assíncronas (Celery + Redis) e teste fácil via Postman.
Uma API simples e robusta que converte URLs longas em versões curtas e gerencia redirecionamentos de forma eficiente.
- 🎯 Encurtamento de URLs
- 🔁 Redirecionamento por meio da URL curta
- ⚡ Processamento assíncrono com Celery + Redis
- 🧠 Organização por camadas (views, services, tasks)
- 📬 Coleção do Postman para testes inclusa
- 🧩 Preparado para escalabilidade
- 🐍 Python
- 🚀 Django & Django REST Framework
- 🐇 Celery (fila de tarefas)
- 🔥 Redis (broker de filas)
- 📦 SQLite (banco leve para desenvolvimento)
- 📬 Postman (coleção para testar endpoints)
📌 Consulte a coleção do Postman disponível em
docs/postmanpara testar todos os endpoints com exemplos prontos.
Antes de rodar o projeto localmente, certifique-se de ter:
- Python 3.8+
- Virtualenv (recomendado)
- Redis rodando localmente ou remotamente (configurar no
.env)
-
Clonar repositório
git clone https://github.com/nicolas-aires-dev/Url_Shortener.git cd Url_Shortener -
Ativar ambiente virtual (venv)
python -m venv venv # Windows ./venv/Scripts/Activate.ps1 # macOS / Linux source venv/bin/activate
-
Instalar dependências
pip install -r requirements.txt
-
Ajustar .env.local
Crie um arquivo na raiz do projeto chamado:
.env.localExemplo:
DEBUG=True SECRET_KEY=local-secret-key CELERY_BROKER_URL=redis://localhost:6379/0 CELERY_RESULT_BACKEND=redis://localhost:6379/0
Certifique-se de que o Redis esteja rodando localmente na porta 6379.
- Rodar Migrations
python manage.py migrate
- Iniciar servidor
python manage.py runserver
- Iniciar workers do Celery
celery -A settings worker -l info -Q light_queue
O ambiente em container utiliza automaticamente o arquivo .env.
- Clonar repositório
git clone https://github.com/nicolas-aires-dev/Url_Shortener.git cd Url_Shortener - Criar arquivo .env
DEBUG=False SECRET_KEY=docker-secret-key ALLOWED_HOSTS=* CELERY_BROKER_URL=redis://redis:6379/0 CELERY_RESULT_BACKEND=redis://redis:6379/0
No Docker, redis é o nome do serviço definido no docker-compose.yml.
-
Subir os containers
docker compose up --build
A aplicação estará disponível em:
http://localhost:8000
O projeto utiliza django-environ para separar configurações por ambiente.
- 🔄 Comportamento padrão
- 🖥 Desenvolvimento local → utiliza .env.local
- 🐳 Docker → utiliza .env
Isso permite manter configurações diferentes para cada contexto sem alterar o código.
Você pode testar a API usando a coleção do Postman incluída na pasta docs/postman. Basta importar o arquivo no Postman e executar as requisições com suas variáveis de ambiente configuradas.
O projeto conta com autenticação via JWT (JSON Web Tokens) para proteger os endpoints.
-
🔑 Usuários podem gerar tokens JWT para realizar requisições autenticadas (Bearer Token).
-
⚙️ Permissões são gerenciadas pelo Django Admin:
- É necessário configurar permissões específicas no Django Admin para os usuários para que consigam realizar requisições.
-
📬 A coleção do Postman disponível em docs/postman já inclui os endpoints de autenticação:
- Obter tokens de acesso e refresh
- Refresh token (renovar o token de acesso)
- Verify token (validar se o token ainda é válido)
- ✅ Integrar Redis como mensagem broker principal
- 📊 Monitoramento de tarefas Celery
- 📈 Suporte multi-worker para alta carga
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias 💡.
Este projeto está sob a licença MIT. Sinta-se livre para usar, modificar e distribuir.