REST APIs para Automação de Redes
O que é
Uma API (Application Programming Interface) é uma interface de software que permite que dois programas se comuniquem entre si. No mundo das redes, APIs são o mecanismo pelo qual sistemas de automação acessam e modificam dispositivos sem intervenção humana no CLI.
REST — Representational State Transfer — não é um protocolo. É uma arquitetura: um conjunto de seis regras que define como uma API deve funcionar. Uma API que segue essas regras é chamada de RESTful. O protocolo de transporte mais comum é o HTTP ou, em produção, sempre o HTTPS.
REST vs SOAP
| Característica | REST | SOAP |
|---|---|---|
| Formato de dados | JSON, XML | Apenas XML |
| Protocolo | HTTP/HTTPS (tipicamente) | HTTP, SMTP e outros |
| Peso | Leve, flexível | Verboso, rígido |
| Estado | Stateless | Pode ser stateful |
| Uso atual | Northbound SDN, RESTCONF, cloud | Sistemas corporativos legados |
SOAP foi o padrão dominante nos anos 2000. Hoje, novos projetos de automação de redes — inclusive os da Cisco — adotam REST. Para o CCNA, entenda REST como o padrão do mercado e SOAP como tecnologia legada.
Os 6 princípios da arquitetura REST
A especificação original define seis restrições. Para o CCNA, foque nas três marcadas com ★:
| # | Princípio | O que significa |
|---|---|---|
| 1 | ★ Client-Server | Cliente e servidor são independentes. Cada um pode evoluir sem quebrar o outro. |
| 2 | ★ Stateless | Cada requisição é um evento isolado. O servidor não guarda histórico de sessões. Autenticação deve ser repetida em cada chamada. |
| 3 | ★ Cacheable | Respostas podem ser armazenadas em cache. O servidor deve declarar o que é cacheável. |
| 4 | Uniform Interface | Interface padronizada entre cliente e servidor (verbos HTTP, URIs, JSON). |
| 5 | Layered System | O cliente não precisa saber quantas camadas existem entre ele e o servidor final. |
| 6 | Code on Demand (opcional) | O servidor pode enviar código executável ao cliente, como JavaScript. |
Como funciona
CRUD: as quatro operações
Toda interação com uma API REST gira em torno de quatro operações chamadas CRUD:
| Letra | Operação | Significado |
|---|---|---|
| C | Create | Criar um novo recurso |
| R | Read | Ler/recuperar um recurso existente |
| U | Update | Modificar um recurso existente |
| D | Delete | Remover um recurso |
Verbos HTTP e mapeamento CRUD
O HTTP usa métodos (verbos) que mapeiam diretamente para as operações CRUD:
| Verbo HTTP | Operação CRUD | Uso típico em redes |
|---|---|---|
POST | Create | Criar nova VLAN, adicionar rota, configurar interface |
GET | Read | Consultar inventário, listar interfaces, obter status |
PUT | Update | Substituir completamente uma configuração existente |
PATCH | Update | Alterar apenas campos específicos de uma configuração |
DELETE | Delete | Remover VLAN, excluir rota estática |
PUT vs PATCH: PUT envia a configuração completa do recurso e substitui tudo. PATCH envia apenas os campos alterados. Se você quiser mudar somente o IP de uma interface sem tocar no restante da configuração, use PATCH.
Estrutura de uma requisição REST
Quando um cliente REST faz uma chamada, o pacote HTTP contém:
- Verbo HTTP — define a operação (
GET,POST, etc.) - URI — endereço do recurso a ser acessado
- Headers — metadados: tipo de dado aceito (
Accept: application/json), token de autenticação (Authorization), tipo do body (Content-Type: application/json) - Body — dados enviados ao servidor (usado em
POST,PUT,PATCH)
Anatomia de uma URI:
https://10.10.20.85/restconf/data/ietf-interfaces:interfaces
^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Scheme Authority Path (recurso) - Scheme: protocolo —
httpouhttps - Authority: endereço do servidor (IP ou hostname)
- Path: recurso que você quer acessar
JSON como formato de dados
REST APIs usam JSON (JavaScript Object Notation) como formato principal, embora XML também seja suportado. JSON é preferido por ser mais compacto e legível. A estrutura chave-valor do JSON é facilmente processada por Python, JavaScript e outras linguagens de automação.
Exemplo de resposta JSON de um roteador Cisco IOS-XE via RESTCONF:
{
"ietf-interfaces:interface": {
"name": "GigabitEthernet1",
"description": "Link para SP - São Paulo",
"type": "iana-if-type:ethernetCsmacd",
"enabled": true,
"ietf-ip:ipv4": {
"address": [
{
"ip": "200.10.50.1",
"prefix-length": 30
}
]
}
}
} Autenticação
APIs REST exigem autenticação para proteger o acesso a dados e configurações:
| Método | Como funciona | Segurança | Uso típico |
|---|---|---|---|
| Basic Auth | Usuário e senha em Base64 no header Authorization | Baixa (sem HTTPS é trivialmente quebrável) | Obtenção inicial de token |
| Token / Bearer | POST com Basic Auth → recebe token → usa token no header Authorization: Bearer <token> | Média-alta (tokens expiram) | APIs Cisco Catalyst Center |
| API Key | Chave estática no header Authorization ou na URL | Média (não expira automaticamente) | Cloud services, third-party APIs |
| OAuth 2.0 | Autorização delegada via access tokens temporários + refresh tokens | Alta (padrão moderno) | Plataformas cloud, APIs corporativas |
Em produção, sempre use HTTPS. Sem criptografia, qualquer método de autenticação é vulnerável a interceptação.
Códigos de resposta HTTP
O servidor responde com um código de 3 dígitos. O primeiro dígito indica a classe:
| Classe | Faixa | Significado |
|---|---|---|
| Informacional | 1xx | Requisição recebida, processando |
| Sucesso | 2xx | Requisição processada com êxito |
| Redirecionamento | 3xx | Recurso movido; nova ação necessária |
| Erro do cliente | 4xx | Problema na requisição enviada |
| Erro do servidor | 5xx | Falha interna no servidor |
Códigos que aparecem no exame CCNA:
| Código | Nome | Quando ocorre |
|---|---|---|
200 | OK | Requisição bem-sucedida (típico de GET) |
201 | Created | Recurso criado (típico de POST) |
301 | Moved Permanently | URI do recurso mudou |
400 | Bad Request | Requisição malformada |
401 | Unauthorized | Autenticação necessária ou inválida |
403 | Forbidden | Autenticado, mas sem permissão para o recurso |
404 | Not Found | Recurso não existe no servidor |
500 | Internal Server Error | Falha inesperada no servidor |
Na prática
Exemplo 1 — Cisco Catalyst Center (ex-DNA Center)
O Catalyst Center é o controlador SDN da Cisco. Sua API REST é usada na interface northbound para automação de rede.
Etapa 1 — Autenticar e obter token (POST com Basic Auth):
POST https://sandboxdnac.cisco.com/dna/system/api/v1/auth/token
Authorization: Basic <base64 de usuário:senha>
Content-Type: application/json Resposta 201 Created:
{
"Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
} Etapa 2 — Consultar inventário (GET com token):
GET https://sandboxdnac.cisco.com/dna/intent/api/v1/network-device
X-Auth-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... Resposta 200 OK com lista de dispositivos em JSON.
Exemplo 2 — RESTCONF no Cisco IOS-XE
O IOS-XE suporta RESTCONF nativamente (RFC 8040). Permite consultar e modificar configurações via API REST diretamente no roteador.
Consultar interfaces (GET com Basic Auth):
GET https://10.10.20.85/restconf/data/ietf-interfaces:interfaces
Authorization: Basic <base64 de admin:senha>
Accept: application/yang-data+json Alterar descrição de interface (PATCH):
PATCH https://10.10.20.85/restconf/data/ietf-interfaces:interfaces/interface=GigabitEthernet1
Authorization: Basic <base64>
Content-Type: application/yang-data+json
{
"ietf-interfaces:interface": {
"name": "GigabitEthernet1",
"description": "Uplink ISP - São Paulo"
}
} Resposta 204 No Content indica sucesso sem body de retorno.
Por que cai no exame
O tópico 6.5 do CCNA 200-301 exige que você descreva as características das REST APIs. Questões frequentes:
- Mapeamento CRUD ↔ verbo HTTP:
POST=Create,GET=Read,PUT/PATCH=Update,DELETE=Delete. Memorize a tabela. - Stateless é uma restrição REST: cada requisição é independente. O servidor não guarda sessão. Não confunda com o TCP subjacente (que é stateful) — camadas diferentes têm comportamentos diferentes.
- Código 404 vs 401 vs 403: 404 = recurso não encontrado; 401 = não autenticado; 403 = autenticado mas sem permissão.
- REST vs SOAP: REST usa JSON/XML, é leve e stateless. SOAP usa só XML, é mais verboso e pode ser stateful.
- Northbound vs Southbound SDN: REST APIs são usadas na interface northbound (apps ↔ controlador). RESTCONF e NETCONF são southbound (controlador ↔ dispositivos).
- URI: composta por scheme (protocolo), authority (host/IP) e path (recurso).
- PUT vs PATCH: PUT substitui tudo; PATCH altera apenas os campos enviados.
Resumo em uma linha
REST APIs permitem que programas acessem e modifiquem recursos de rede via HTTP com verbos padronizados (GET/POST/PUT/PATCH/DELETE), dados em JSON e comunicação stateless — base da automação SDN moderna.