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?
- Instalação e Configuração Profissional
- Models, Serializers e a Arquitetura DRF Completa
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:
-
DEFAULT_AUTHENTICATION_CLASSES: Define COMO os usuários provam quem são. Token é stateless (ideal para mobile), Session usa cookies (ideal para web).
-
DEFAULT_PERMISSION_CLASSES: Define QUEM pode fazer O QUÊ.
IsAuthenticatedOrReadOnlysignifica: qualquer um pode ler (GET), mas só autenticados podem escrever (POST/PUT/DELETE). -
DEFAULT_PAGINATION_CLASS: Pagina automaticamente resultados. Sem isso, retornar 10.000 produtos travaria a API!
-
DEFAULT_FILTER_BACKENDS: Adiciona filtros, busca textual e ordenação em TODOS os endpoints automaticamente.
-
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:
- Leia os posts detalhados linkados abaixo
- Implemente um projeto completo de API
- Adicione JWT authentication
- Configure documentação Swagger
- 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! 🚀
"Porque o Senhor dá a sabedoria, e da sua boca vem a inteligência e o entendimento" Pv 2:6