Skip to content

nicolas-aires-dev/Url_Shortener

Repository files navigation

🎯 Objetivo do Projeto

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

📦 URL Shortener API

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.


🚀 Funcionalidades

  • 🎯 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

🧠 Tecnologias utilizadas

  • 🐍 Python
  • 🚀 Django & Django REST Framework
  • 🐇 Celery (fila de tarefas)
  • 🔥 Redis (broker de filas)
  • 📦 SQLite (banco leve para desenvolvimento)
  • 📬 Postman (coleção para testar endpoints)

📡 Endpoints Principais

📌 Consulte a coleção do Postman disponível em docs/postman para testar todos os endpoints com exemplos prontos.


⚙️ Pré-requisitos

Antes de rodar o projeto localmente, certifique-se de ter:

  • Python 3.8+
  • Virtualenv (recomendado)
  • Redis rodando localmente ou remotamente (configurar no .env)

🛠️ Como rodar o projeto (local)

  1. Clonar repositório

    git clone https://github.com/nicolas-aires-dev/Url_Shortener.git
    cd Url_Shortener
    
  2. Ativar ambiente virtual (venv)

    python -m venv venv
    # Windows
    ./venv/Scripts/Activate.ps1
    # macOS / Linux
    source venv/bin/activate
    
  3. Instalar dependências

    pip install -r requirements.txt
    
  4. Ajustar .env.local

    Crie um arquivo na raiz do projeto chamado:

     .env.local
    

    Exemplo:

     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.

  1. Rodar Migrations
    python manage.py migrate
    
  2. Iniciar servidor
    python manage.py runserver
    
  3. Iniciar workers do Celery
    celery -A settings worker -l info -Q light_queue
    
    

🐳 Como rodar o projeto (Docker container)

O ambiente em container utiliza automaticamente o arquivo .env.

  1. Clonar repositório
    git clone https://github.com/nicolas-aires-dev/Url_Shortener.git
    cd Url_Shortener
    
  2. 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.

  1. Subir os containers

    docker compose up --build

    A aplicação estará disponível em:

    http://localhost:8000

⚙️ Configuração de Ambiente (.env)

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.


🧪 Testes e Postman

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.

🛡️ Autenticação e Segurança (em breve)

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)

🚧 Possíveis Melhorias

  • ✅ Integrar Redis como mensagem broker principal
  • 📊 Monitoramento de tarefas Celery
  • 📈 Suporte multi-worker para alta carga

🤝 Contribuição

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias 💡.

📄 Licença

Este projeto está sob a licença MIT. Sinta-se livre para usar, modificar e distribuir.

About

API de encurtamento de URLs com Django + Celery + Redis, aplicando escalabilidade, filas assíncronas e boas práticas de backend. Inclui autenticação via JWT e permissões configuráveis pelo Django Admin, servindo como laboratório de arquitetura e sistemas distribuídos.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages