Django REST Framework 2025: Guia Definitivo de APIs REST

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Download do Artigo

Salve salve Pythonista!

Django REST Framework (DRF) é hoje o padrão de facto para construir APIs REST profissionais com Python.

Em 2025, com a versão 3.15+, o DRF continua sendo a escolha número 1 de desenvolvedores e empresas que precisam criar APIs robustas, escaláveis e bem documentadas. Usado por gigantes como Mozilla, Red Hat, Heroku e Eventbrite, o DRF prova sua maturidade e confiabilidade em produção.

Este é o guia definitivo de Django REST Framework em 2025: um artigo pilar completo que cobre desde a configuração inicial até técnicas avançadas de autenticação, filtros, paginação, versionamento e testes. Se você já conhece Django e quer dominar a criação de APIs REST profissionais, ou se está começando agora no mundo de APIs, este guia é para você!

Prepare-se para uma jornada completa pelo universo do DRF! 🚀

Vá Direto ao Assunto…

O que é Django REST Framework e por que usar em 2025?

Antes de mergulharmos no código, é fundamental entender o que é o DRF e por que ele se mantém relevante mesmo com o surgimento de alternativas como FastAPI.

Django REST Framework (DRF) é um toolkit poderoso e flexível para construir Web APIs com Django. Criado em 2011 por Tom Christie, o DRF rapidamente se tornou o padrão da indústria para desenvolvimento de APIs REST em Python, e por boas razões.

A evolução do DRF ao longo dos anos

O DRF não é uma biblioteca estagnada - ela evoluiu consistentemente:

  • 2020-2021: Foco intenso em performance e otimizações de queries
  • 2022: Grandes melhorias na documentação automática com suporte completo a OpenAPI 3.0
  • 2023: Suporte aprimorado para async views introduzidas no Django 4.x
  • 2024-2025: Integração mais natural com Pydantic e melhor suporte a type hints

Por que DRF ainda é a melhor escolha para muitos projetos?

Vamos ser honestos: existem outras ótimas opções no mercado (FastAPI, Flask-RESTful, Ninja). Então por que escolher DRF?

1. Serialização Poderosa e Madura

O sistema de serialização do DRF vai muito além de simplesmente converter objetos para JSON. Ele oferece:

  • Validação automática de dados baseada em types e constraints
  • Conversão bidirecional perfeita (Python ↔ JSON)
  • Suporte nativo para relacionamentos complexos do Django ORM (ForeignKey, ManyToMany, etc)
  • Serializers aninhados para estruturas hierárquicas profundas
  • Sistema de validação em múltiplos níveis (campo, objeto, cross-field)

2. Autenticação Enterprise-Ready

Enquanto muitos frameworks exigem bibliotecas externas para autenticação básica, o DRF já vem pronto com:

  • Session Authentication (cookies) - ideal para web tradicional
  • Token Authentication (stateless) - ideal para mobile e SPAs
  • Suporte completo e testado para OAuth2 e JWT
  • Sistema de permissões extremamente granular
  • Facilidade para criar esquemas de autenticação customizados

3. Browsable API: A Killer Feature que você vai amar

Uma das features mais amadas (e únicas) do DRF é a Browsable API - uma interface web interativa e automática que permite:

  • Testar endpoints diretamente no navegador, sem Postman ou cURL
  • Ver documentação inline para cada endpoint
  • Fazer requisições POST/PUT/DELETE com formulários HTML gerados automaticamente
  • Debug visual de responses com syntax highlighting
  • Explorar a API sem ferramentas externas

Acredite: depois que você se acostumar com a Browsable API, vai sentir falta em qualquer outro framework.

4. Documentação Automática de Nível Mundial

O DRF oferece integrações nativas e maduras para:

  • OpenAPI/Swagger via drf-spectacular
  • ReDoc para documentação linda e interativa
  • CoreAPI para schema automático

5. Filosofia “Batteries Included” herdada do Django

Assim como Django, o DRF segue a filosofia de incluir tudo que você precisa para começar:

  • Paginação automática configurável
  • Sistema de filtros robusto
  • Throttling (rate limiting) embutido
  • Versionamento de API built-in
  • Content negotiation (JSON, XML, YAML, etc)
  • Suporte CORS integrado
  • Framework de testes completo

Comparação honesta: DRF vs FastAPI vs Flask-RESTful

Não vamos fazer propaganda cega - vamos comparar objetivamente:

Critério DRF FastAPI Flask-RESTful
Maturidade ✅ 13+ anos ⚠️ 6 anos ✅ 10 anos
ORM Integrado ✅ Django ORM nativo ❌ Requer SQLAlchemy ❌ Manual
Admin Panel ✅ Django Admin grátis ❌ Não ❌ Não
Async Support ⚠️ Parcial (Django 5.x) ✅ Completo desde início ❌ Não
Type Hints ⚠️ Manual ✅ Nativo e obrigatório ❌ Não
Performance Bruta ⚠️ Boa ✅ Excelente ⚠️ Média
Documentação ✅ Excepcional ✅ Excepcional ⚠️ Média
Comunidade ✅ Enorme e ativa ✅ Crescendo rapidamente ⚠️ Média
Curva de Aprendizado ⚠️ Média (requer Django) ✅ Baixa ✅ Baixa
Ideal para Apps completas Microserviços puros APIs simples

Quando escolher DRF:

  • ✅ Você já tem uma aplicação Django existente
  • ✅ Precisa do Django Admin para gerenciar dados
  • ✅ Quer uma solução madura e battle-tested em produção
  • ✅ Prioriza ecossistema rico e comunidade gigantesca
  • ✅ Precisa de autenticação e permissões complexas out-of-the-box
  • ✅ Seu time já conhece Django

Quando considerar FastAPI:

  • Está criando uma API pura (microserviço) do zero
  • Performance máxima é um requisito crítico
  • Quer async/await completo desde o início
  • Prioriza type hints nativos e validação com Pydantic
  • Não precisa de Django Admin ou ORM Django

Instalação e Configuração Profissional

Agora que você entende o valor do DRF, vamos configurar um ambiente profissional completo. Esta seção vai além do básico “pip install” e inclui boas práticas essenciais para projetos reais.

Pré-requisitos: Prepare seu ambiente

Antes de começar, certifique-se de ter:

  • Python 3.10+ instalado (recomendado 3.11 ou 3.12 para melhor performance)
  • pip atualizado (python -m pip install --upgrade pip)
  • Git configurado para controle de versão
  • Editor/IDE configurado (VS Code, PyCharm, etc)

Por que usar ambientes virtuais é OBRIGATÓRIO

Ambientes virtuais não são opcionais em projetos profissionais - são obrigatórios. Eles:

  • Isolam dependências do projeto (evita conflitos)
  • Permitem versões diferentes de pacotes em projetos diferentes
  • Facilitam deploy e replicação do ambiente
  • São best practice universal em Python

Crie seu ambiente virtual:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Criar ambiente virtual
python -m venv venv

# Ativar no Linux/Mac
source venv/bin/activate

# Ativar no Windows PowerShell
venv\Scripts\Activate.ps1

# Ativar no Windows CMD
venv\Scripts\activate.bat

# Verificar que está ativo (deve mostrar (venv) no prompt)
which python  # Linux/Mac - deve mostrar path do venv
where python  # Windows - deve mostrar path do venv

Instalando Django e DRF: O jeito certo

Com o ambiente ativo, vamos instalar os pacotes essenciais. Note que instalamos versões específicas para garantir compatibilidade:

1
2
3
4
5
6
7
8
9
10
11
# Core: Django LTS + DRF estável
pip install django==5.1 djangorestframework==3.15

# Pacotes complementares importantes
pip install markdown          # Suporte Markdown na browsable API
pip install django-filter     # Filtros avançados (MUITO usado)
pip install python-decouple   # Gerenciar secrets de forma segura
pip install psycopg2-binary   # PostgreSQL (sempre use Postgres em produção!)

# Salvar dependências (IMPORTANTE!)
pip freeze > requirements.txt

Por que esses pacotes extras?

  • markdown: Permite usar Markdown em docstrings que aparecem lindamente formatadas na Browsable API
  • django-filter: Essencial para criar filtros complexos (ranges, lookups, etc). Você VAI usar.
  • python-decouple: Gerencia secrets (API keys, database URLs, SECRET_KEY) de forma segura, sem hardcode
  • psycopg2-binary: Driver PostgreSQL. SQLite é OK para dev, mas SEMPRE use PostgreSQL em produção!

Criar estrutura do projeto Django

Vamos criar um projeto exemplo de API de produtos (e-commerce básico):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Criar projeto Django
django-admin startproject myapi
cd myapi

# Criar app para produtos
python manage.py startapp products

# Estrutura criada:
# myapi/
# ├── myapi/           # Configurações do projeto
# │   ├── __init__.py
# │   ├── settings.py  # Vamos configurar este
# │   ├── urls.py      # Vamos configurar este
# │   ├── wsgi.py
# │   └── asgi.py
# ├── products/        # Nossa app
# │   ├── migrations/
# │   ├── __init__.py
# │   ├── admin.py
# │   ├── apps.py
# │   ├── models.py    # Vamos criar models aqui
# │   ├── serializers.py  # Vamos criar este arquivo
# │   ├── views.py     # Vamos criar views aqui
# │   └── tests.py     # Vamos escrever testes aqui
# └── manage.py

Configurando settings.py: O jeito profissional

Esta é a configuração mais importante. Vamos além do básico e incluímos settings prontos para produção:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# myapi/settings.py

# Imports
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# Apps instaladas - ordem importa!
INSTALLED_APPS = [
    # Django apps padrão
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # Third party apps (sempre antes das suas)
    'rest_framework',           # DRF core
    'rest_framework.authtoken', # Token authentication
    'django_filters',           # Sistema de filtros avançados
    
    # Suas apps (sempre por último)
    'products',
]

# Configurações REST Framework - o coração do DRF
REST_FRAMEWORK = {
    # Como usuários se autenticam
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',  # Para mobile/SPA
        'rest_framework.authentication.SessionAuthentication', # Para web tradicional
    ],
    
    # Quem pode acessar (permissões padrão)
    # IsAuthenticatedOrReadOnly = GET é público, POST/PUT/DELETE requer login
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ],
    
    # Paginação automática (ESSENCIAL para performance)
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,  # 10 itens por página
    
    # Filtros, busca e ordenação automáticos
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
        'rest_framework.filters.SearchFilter',
        'rest_framework.filters.OrderingFilter',
    ],
    
    # Formatos de resposta (JSON + interface web)
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',  # A famosa Browsable API
    ],
    
    # Throttling (rate limiting) - proteção contra abuso
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',    # Limite para anônimos
        'rest_framework.throttling.UserRateThrottle'      # Limite para autenticados
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',    # 100 requests/dia para IPs anônimos
        'user': '1000/day'    # 1000 requests/dia para usuários autenticados
    }
}

Entendendo as configurações acima:

  1. DEFAULT_AUTHENTICATION_CLASSES: Define COMO os usuários provam quem são. Token é stateless (ideal para mobile), Session usa cookies (ideal para web).

  2. DEFAULT_PERMISSION_CLASSES: Define QUEM pode fazer O QUÊ. IsAuthenticatedOrReadOnly significa: qualquer um pode ler (GET), mas só autenticados podem escrever (POST/PUT/DELETE).

  3. DEFAULT_PAGINATION_CLASS: Pagina automaticamente resultados. Sem isso, retornar 10.000 produtos travaria a API!

  4. DEFAULT_FILTER_BACKENDS: Adiciona filtros, busca textual e ordenação em TODOS os endpoints automaticamente.

  5. DEFAULT_THROTTLE_RATES: Protege contra scrapers e ataques DoS limitando requests por tempo.

📚 Leia mais: Configurando um Projeto DRF Profissional

Aplicar migrações e criar superusuário

Antes de começar a codificar, precisamos preparar o banco de dados:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Aplicar migrações iniciais do Django
python manage.py migrate

# Output esperado (resumido):
# Operations to perform:
#   Apply all migrations: admin, auth, contenttypes, sessions, authtoken
# Running migrations:
#   Applying contenttypes.0001_initial... OK
#   Applying auth.0001_initial... OK
#   Applying admin.0001_initial... OK
#   Applying authtoken.0001_initial... OK
#   ...

# Criar superusuário para acessar o Admin
python manage.py createsuperuser

# Digite:
# Username (leave blank to use 'yourname'): admin
# Email address: [email protected]
# Password: ********
# Password (again): ********
# Superuser created successfully.

O Django criou automaticamente todas as tabelas necessárias para:

  • Autenticação de usuários (auth_user)
  • Sessões (django_session)
  • Tokens de autenticação (authtoken_token)
  • Sistema de permissões (auth_permission)

Testar o servidor - Momento da verdade!

Vamos verificar se tudo está funcionando:

1
2
3
4
5
6
7
8
9
10
11
python manage.py runserver

# Output:
# Watching for file changes with StatReloader
# Performing system checks...
# 
# System check identified no issues (0 silenced).
# May 03, 2025 - 10:30:00
# Django version 5.1, using settings 'myapi.settings'
# Starting development server at http://127.0.0.1:8000/
# Quit the server with CONTROL-C.

Abra o navegador e acesse:

  • http://127.0.0.1:8000/admin/ - Django Admin (login com o superuser)
  • http://127.0.0.1:8000/api/ - Sua API (criaremos os endpoints em seguida)

Ambiente totalmente configurado e funcionando! Próximo: criar Models e Serializers.

Models, Serializers e a Arquitetura DRF Completa

Por limitações de espaço, este guia pilar cobre os fundamentos essenciais. Para implementações completas de:

  • Models complexos com relacionamentos
  • Serializers nested com validações avançadas
  • ViewSets com custom actions
  • Autenticação JWT completa
  • Filtros django-filter personalizados
  • Testes APITestCase profissionais

Acesse os posts detalhados abaixo que cobrem cada tópico em profundidade com código completo e exemplos práticos.

Conclusão

Neste guia definitivo de Django REST Framework 2025, você aprendeu:

O que é DRF - Padrão de facto para APIs REST em Python
Por que usar - Vantagens sobre FastAPI e outras opções
Instalação profissional - Ambiente, configuração, boas práticas
Arquitetura - Models, Serializers, Views, URLs
Comparação honesta - DRF vs FastAPI vs Flask-RESTful

Principais aprendizados:

  • DRF é ideal quando você já tem Django ou precisa do Admin
  • Browsable API é uma killer feature única
  • Serializers são mais poderosos que Pydantic para Django
  • ViewSets são a forma moderna de criar APIs CRUD
  • Maturidade de 13+ anos importa em produção

Próximos passos:

  1. Leia os posts detalhados linkados abaixo
  2. Implemente um projeto completo de API
  3. Adicione JWT authentication
  4. Configure documentação Swagger
  5. Escreva testes com cobertura > 80%

Posts relacionados:

🔗 O que é Django REST Framework
🔗 Construção de APIs com DRF
🔗 Configurando Projeto DRF
🔗 Serializers no DRF
🔗 Filtros, Busca e Ordenação
🔗 Guia Completo Django 2025

Django REST Framework continua sendo a melhor escolha quando você precisa de APIs REST robustas, escaláveis e bem documentadas com Django!

Até a próxima! 🚀

Começe agora sua Jornada na Programação!

Não deixe para amanhã o sucesso que você pode começar a construir hoje!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.