REST é um estilo arquitetural para construir APIs web.
Ele usa os verbos HTTP (GET, POST, PUT, DELETE) como ações.
Primeiramente, cada recurso é identificado por uma URL única.
Por exemplo, /produtos/42 acessa o produto 42.
Além disso, as respostas geralmente usam o formato JSON.
A voz passiva é usada aqui: “os dados são transferidos sem estado”.
Isso significa que cada requisição contém toda informação necessária.
Quando utilizar REST? Na maioria das aplicações web modernas.
Python oferece duas ferramentas essenciais para REST.
Requests para consumir APIs e Django REST Framework para criá-las.
Vamos explorar ambas em detalhes práticos.
Três subtítulos organizam este guia completo.
Ao final, você saberá construir e consumir APIs profissionais.
Requests: consumindo apis rest com simplicidade
Requests é a biblioteca mais popular para HTTP em Python.
Ela simplifica chamadas GET, POST, PUT e DELETE.
Quando usar Requests? Em qualquer projeto que consuma APIs externas.
Por exemplo, buscar dados de clima, cotação ou redes sociais.
Primeiro, instale com pip install requests.
Depois, faça chamadas com poucas linhas de código.
A voz passiva é aplicada: “os parâmetros são passados como dicionário”.
Exemplo completo de consumo de API REST:
|
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 |
import requests # GET - Buscar dados response = requests.get('https://jsonplaceholder.typicode.com/posts/1') if response.status_code == 200: dados = response.json() # Converte JSON para dict print(f"Título: {dados['title']}") else: print(f"Erro: {response.status_code}") # POST - Criar recurso novo_post = { 'title': 'Meu Post', 'body': 'Conteúdo do post', 'userId': 1 } response = requests.post( 'https://jsonplaceholder.typicode.com/posts', json=novo_post ) print(f"Criado: {response.status_code}") # PUT - Atualizar inteiro atualizacao = { 'id': 1, 'title': 'Título Atualizado', 'body': 'Novo conteúdo', 'userId': 1 } response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=atualizacao) # DELETE - Remover response = requests.delete('https://jsonplaceholder.typicode.com/posts/1') # Com autenticação básica response = requests.get('https://api.exemplo.com/dados', auth=('usuario', 'senha')) # Com headers personalizados headers = {'Authorization': 'Bearer token123'} response = requests.get('https://api.exemplo.com/protegido', headers=headers) # Tratamento de erros try: response = requests.get('https://api.inexistente.com', timeout=5) response.raise_for_status() # Lança exceção para 4xx/5xx except requests.exceptions.RequestException as e: print(f"Falha na requisição: {e}") |
Requests trata JSON, autenticação e erros de forma elegante. É a ferramenta padrão para integração com APIs REST.
Django rest framework: construindo apis profissionais
Django REST Framework (DRF) é o padrão para APIs com Django.
Ele oferece serializadores, viewsets e autenticação prontos.
Quando usar DRF? Em projetos Django que precisam de API robusta.
Primeiro, instale com pip install djangorestframework.
Adicione 'rest_framework' ao INSTALLED_APPS do Django.
A voz passiva é aplicada: “os serializadores são usados para validar dados”.
Exemplo completo de uma API de produtos com DRF:
|
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 |
# models.py from django.db import models class Produto(models.Model): nome = models.CharField(max_length=100) preco = models.DecimalField(max_digits=10, decimal_places=2) estoque = models.IntegerField() criado_em = models.DateTimeField(auto_now_add=True) def __str__(self): return self.nome # serializers.py from rest_framework import serializers from .models import Produto class ProdutoSerializer(serializers.ModelSerializer): class Meta: model = Produto fields = ['id', 'nome', 'preco', 'estoque', 'criado_em'] # views.py from rest_framework import viewsets, permissions from .models import Produto from .serializers import ProdutoSerializer class ProdutoViewSet(viewsets.ModelViewSet): queryset = Produto.objects.all() serializer_class = ProdutoSerializer permission_classes = [permissions.IsAuthenticatedOrReadOnly] # urls.py from django.urls import path, include from rest_framework.routers import DefaultRouter from .views import ProdutoViewSet router = DefaultRouter() router.register(r'produtos', ProdutoViewSet) urlpatterns = [ path('api/', include(router.urls)), path('api-auth/', include('rest_framework.urls')), ] |
Com esse código, você tem uma API completa com:
Listagem, criação, atualização, remoção e autenticação.
Acesse /api/produtos/ para testar no navegador.
DRF também gera uma interface web para explorar a API.
Isso acelera o desenvolvimento em pelo menos 70%.
Quando usar requests vs. django rest framework
Requests é para consumo de APIs de terceiros. DRF é para criação de suas próprias APIs. Portanto, as ferramentas são complementares, não concorrentes. Use Requests em scripts, bots ou integrações simples. Use DRF em sistemas web completos com Django. A fórmula de produtividade com DRF: \(P = \frac{T_{\text{manual}}}{T_{\text{DRF}}} \approx 3\) Ou seja, você é três vezes mais rápido com DRF. No entanto, DRF exige conhecimento de Django. Para APIs pequenas sem Django, prefira FastAPI ou Flask. Requests é obrigatório em qualquer ambiente Python. Ele é leve, rápido e fácil de aprender. Combine ambos quando seu Django REST Framework consumir outras APIs. Exemplo: sua API DRF pode chamar um serviço externo via Requests. A voz passiva é usada: “diferentes camadas são integradas harmoniosamente”. Portanto, domine as duas ferramentas para ser um desenvolvedor completo. Comece com Requests hoje mesmo. Avance para DRF quando precisar escalar seu projeto.