0Pricing
AI Agents · Aula

Fundamentos da API REST para desenvolvedores de agentes

Métodos HTTP, códigos de status, cabeçalhos e formato de requisição/resposta JSON.

Fundamentos da API REST para desenvolvedores de agentes é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.

O que é uma solicitação HTTP?

Todo agente que se conecta a um serviço externo usa HTTP, a linguagem da web. Uma solicitação HTTP tem três partes principais: um método, uma URL e cabeçalhos e um corpo opcionais.

Considere o método um verbo que informa ao servidor o que você deseja fazer e a URL o endereço do recurso.

import requests

# A simple GET request to a public API
response = requests.get('https://api.example.com/users')
print(response.status_code)  # 200
print(response.text)          # raw JSON string

GET — Busca de dados

GET recupera dados de um servidor. Ele nunca deve modificar nada. Os agentes usam GET para ler perfis de usuários, buscar listas de tarefas ou obter dados de configuração.

Você pode passar parâmetros na URL como uma cadeia de consulta usando o argumento params.

import requests

# Fetch users filtered by role
params = {'role': 'admin', 'page': 1, 'limit': 10}
response = requests.get(
    'https://api.example.com/users',
    params=params
)
# URL becomes: /users?role=admin&page=1&limit=10
data = response.json()
print(data['users'])

POST — Criação de recursos

POST envia dados ao servidor para criar um novo recurso. Os agentes usam POST para enviar tarefas, mensagens ou acionar ações. Os dados vão no corpo da solicitação como JSON.

Sempre defina o cabeçalho Content-Type: application/json: a maioria das APIs exige isso.

import requests
import json

payload = {
    'title': 'Research competitors',
    'assignee': 'agent-001',
    'priority': 'high'
}

response = requests.post(
    'https://api.example.com/tasks',
    json=payload  # sets Content-Type automatically
)
print(response.status_code)  # 201 Created
new_task = response.json()
print('Created task ID:', new_task['id'])

PUT e PATCH — Atualização de dados

PUT substitui um recurso inteiro por novos dados. PATCH atualiza apenas campos específicos. Os agentes usam PUT quando têm o objeto completo atualizado e PATCH para alterações parciais, como atualizar o status de uma tarefa.

import requests

task_id = '42'

# PATCH: only update the status field
response = requests.patch(
    f'https://api.example.com/tasks/{task_id}',
    json={'status': 'completed'}
)
print(response.status_code)  # 200

# PUT: replace the whole task object
full_task = {
    'title': 'Research competitors',
    'assignee': 'agent-001',
    'priority': 'low',
    'status': 'completed'
}
response = requests.put(
    f'https://api.example.com/tasks/{task_id}',
    json=full_task
)
print(response.status_code)  # 200

DELETE — Remoção de recursos

DELETE remove um recurso do servidor. Os agentes usam DELETE para limpar dados temporários, remover tarefas processadas ou cancelar trabalhos agendados. A maioria das solicitações DELETE não tem corpo.

Uma exclusão (delete) bem-sucedida normalmente retorna 204 No Content: nenhum corpo na resposta.

import requests

task_id = '42'

response = requests.delete(
    f'https://api.example.com/tasks/{task_id}'
)

if response.status_code == 204:
    print('Task deleted successfully')
elif response.status_code == 404:
    print('Task not found — already deleted?')
else:
    print('Unexpected status:', response.status_code)

Códigos de status: sucesso 2xx

Os códigos de status informam ao seu agente se uma solicitação foi bem-sucedida ou falhou. A faixa 2xx significa sucesso:

  • 200 OK — GET/PUT/PATCH retornaram dados
  • 201 Created — POST criou um novo recurso
  • 204 No Content — DELETE foi bem-sucedido, sem corpo retornado

Sempre verifique o código de status antes de processar o corpo da resposta.

import requests

response = requests.post(
    'https://api.example.com/tasks',
    json={'title': 'New task'}
)

if response.status_code == 201:
    task = response.json()
    print('Created:', task['id'])
elif response.status_code == 200:
    print('Updated existing resource')
else:
    print('Unexpected code:', response.status_code)

Códigos de status: erros do cliente 4xx

Erros 4xx significam que seu agente enviou uma solicitação inválida. Alguns comuns:

  • 400 Bad Request — JSON inválido ou campo obrigatório ausente
  • 401 Unauthorized — chave de API ausente ou inválida
  • 404 Not Found — o recurso não existe
  • 429 Too Many Requests — limite de frequência excedido

Esses erros exigem que seu agente corrija a solicitação, não que tente novamente às cegas.

import requests

response = requests.get(
    'https://api.example.com/tasks/9999',
    headers={'Authorization': 'Bearer YOUR_KEY'}
)

if response.status_code == 401:
    print('AUTH ERROR: Check your API key')
elif response.status_code == 404:
    print('Task not found')
elif response.status_code == 429:
    retry_after = response.headers.get('Retry-After', 60)
    print(f'Rate limited. Wait {retry_after}s')
elif response.status_code == 400:
    print('Bad request:', response.json().get('error'))

Códigos de status: erros do servidor 5xx

Erros 5xx significam que algo deu errado no lado do servidor: seu agente não fez nada de errado. Alguns comuns:

  • 500 Internal Server Error — erro ou falha do servidor
  • 502 Bad Gateway — falha do serviço upstream
  • 503 Service Unavailable — servidor sobrecarregado ou indisponível

É seguro tentar novamente após uma breve espera.

import requests
import time

def get_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        if response.status_code < 500:
            return response  # success or client error
        wait = 2 ** attempt
        print(f'Server error {response.status_code}, retrying in {wait}s...')
        time.sleep(wait)
    return response  # return last response after retries

Cabeçalhos da solicitação

Cabeçalhos transportam metadados em cada solicitação. Os mais importantes para os agentes são:

  • Content-Type: application/json — informa ao servidor que seu corpo está em JSON
  • Authorization: Bearer TOKEN — autentica sua solicitação
  • Accept: application/json — informa ao servidor que você espera receber JSON
  • User-Agent — identifica seu cliente (algumas APIs exigem isso)
import requests

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-proj-abc123xyz',
    'Accept': 'application/json',
    'User-Agent': 'MyAgent/1.0'
}

response = requests.post(
    'https://api.example.com/analyze',
    headers=headers,
    json={'text': 'Analyze this document'}
)

print(response.json())

Corpo JSON da solicitação e da resposta

A maioria das APIs modernas troca dados em JSON. Ao enviar, use json=payload nas solicitações (isso serializa os dados e define os cabeçalhos automaticamente). Ao receber, chame response.json() para analisar o corpo e transformá-lo em um dicionário Python.

Sempre valide se as chaves esperadas existem antes de acessá-las.

import requests

# Send JSON body
response = requests.post(
    'https://api.example.com/summarize',
    json={
        'content': 'Long article text here...',
        'max_length': 150,
        'format': 'bullet_points'
    }
)

# Parse JSON response
result = response.json()

# Always check keys exist
summary = result.get('summary', 'No summary returned')
tokens_used = result.get('usage', {}).get('total_tokens', 0)

print('Summary:', summary)
print('Tokens used:', tokens_used)

Reunindo tudo

Um agente bem escrito encapsula as chamadas de API com seleção de método, cabeçalhos adequados, verificação do código de status e análise de JSON em uma função auxiliar organizada. Isso torna cada interação com a API consistente e fácil de depurar.

Use um objeto Session para reutilizar conexões e compartilhar cabeçalhos entre várias solicitações.

import requests

class APIClient:
    def __init__(self, base_url, api_key):
        self.base_url = base_url
        self.session = requests.Session()
        self.session.headers.update({
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        })

    def get(self, path, params=None):
        r = self.session.get(f'{self.base_url}{path}', params=params)
        r.raise_for_status()
        return r.json()

    def post(self, path, payload):
        r = self.session.post(f'{self.base_url}{path}', json=payload)
        r.raise_for_status()
        return r.json()

# Usage
client = APIClient('https://api.example.com', 'sk-proj-abc123')
tasks = client.get('/tasks', params={'status': 'open'})
new_task = client.post('/tasks', {'title': 'Write report'})

Verificação rápida: métodos HTTP

Teste sua compreensão dos métodos HTTP e dos códigos de status.

Recapitulação dos fundamentos de HTTP

Agora você conhece os fundamentos de HTTP dos quais todo agente depende:

  • GET busca, POST cria, PUT/PATCH atualiza e DELETE remove
  • 2xx = sucesso, 4xx = culpa do seu agente, 5xx = culpa do servidor
  • Os cabeçalhos transportam autenticação (Authorization: Bearer) e formato (Content-Type: application/json)
  • Use response.json() para analisar o corpo e .get() para acessar campos com segurança
  • Um objeto Session compartilha cabeçalhos e conexões entre solicitações

Com esses fundamentos bem consolidados, você pode conectar seu agente a qualquer API REST com confiança.

Perguntas Frequentes

A aula “Fundamentos da API REST para desenvolvedores de agentes” é grátis?

Sim — o texto completo de “Fundamentos da API REST para desenvolvedores de agentes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.

O que vou aprender em “Fundamentos da API REST para desenvolvedores de agentes”?

Métodos HTTP, códigos de status, cabeçalhos e formato de requisição/resposta JSON. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AI Agents?

Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Fundamentos da API REST para desenvolvedores de agentes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AI Agents?

Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fundamentos da API REST para desenvolvedores de agentes
  2. Autenticação: chaves de API e OAuth
  3. Lidando com respostas e erros de APIs
  4. Limitação de taxa e lógica de novas tentativas
← Voltar para AI Agents