Introdução à FastAPI

FastAPI é um framework para construir APIs com Python 3.7+. Em automação de redes, FastAPI é ideal para criar APIs que interagem com dispositivos, como roteadores e switches, de forma rápida e escalável.

Recursos

Principais Características

  • Alta Performance: Suporta chamadas assíncronas por padrão

  • Fácil de Usar: Projetado para ser simples, mesmo para iniciantes em Python.

  • Documentação Automática: Gera documentação interativa (Swagger UI) para suas APIs.

  • Baseado em Padrões: Compatível com OpenAPI e JSON Schema, padrões comuns em APIs de rede.

Por que FastAPI para Automação de Redes?

FastAPI é uma boa escolha porque:

  • Permite criar endpoints para consultar ou configurar dispositivos rapidamente.

  • Suporta operações assíncronas, úteis para interagir com vários dispositivos ao mesmo tempo.

  • Valida dados automaticamente (ex.: configurações de rede em JSON), reduzindo erros.

FastAPI vs. Outros Frameworks

Framework Performance Verificação de Tipos Documentação Validação
FastAPI Muito Alta Sim Automática Automática
Flask Média Não Manual Manual
Django Média Não Manual Serializadores

FastAPI se destaca pela performance e pela facilidade de criar APIs robustas

Configuração do Ambiente

Para começar, configure um ambiente virtual Python e instale o FastAPI e o Uvicorn (servidor ASGI).

Instalar FastAPI e Uvicorn

pip install fastapi uvicorn

Verificar a Instalação

Crie um arquivo main.py com uma API simples:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"mensagem": "Bem-vindo à AUTONETOPS"}

Execute a aplicação:

uvicorn main:app --reload

Acesse http://localhost:8000

Sua Primeira Aplicação FastAPI

Vamos criar uma API para gerenciar informações de dispositivos de rede, como roteadores ou switches. Este exemplo simula interações com dispositivos, preparando você para integrar com Netmiko ou NAPALM nas próximas lições.

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# Modelo para representar um dispositivo de rede
class Device(BaseModel):
    hostname: str
    ip: str
    device_type: str = "cisco_ios"  # Valor padrão

# Endpoint para saudação inicial
@app.get("/")
def read_root():
    return {"mensagem": "API para Automação de Redes"}

# Endpoint para obter informações de um dispositivo por ID
@app.get("/devices/{device_id}")
def read_device(device_id: int, status: str = None):
    return {"device_id": device_id, "status": status}

# Endpoint para criar um novo dispositivo
@app.post("/devices/")
def create_device(device: Device):
    return {"hostname": device.hostname, "ip": device.ip, "device_type": device.device_type}

Explicação do Código

  • Operações de Caminho: Usamos @app.get e @app.post para definir endpoints.

  • Parâmetros de Caminho: {device_id} é convertido automaticamente para int.

  • Parâmetros de Consulta: status é opcional (valor padrão None).

  • Modelo Pydantic: A classe Device define e valida dados de entrada (ex.: JSON com hostname e ip).

  • Documentação Automática: Acesse http://localhost:8000/docs para testar a API interativamente.

Como Executar

Salve o código em main.py e execute:

uvicorn main:app --reload

Teste os endpoints:

Atividade Prática

  1. Explorar a Documentação:

    • Acesse http://localhost:8000/docs e teste os endpoints GET e POST.

    • Envie um POST com um dispositivo inválido (ex.: ip ausente) e observe a validação automática.

  2. Criar um Novo Endpoint:

    • Adicione um endpoint GET /devices/ que retorna uma lista fixa de dispositivos. Ex: [{"hostname": "r1", "ip": "172.20.20.11"}]
💡
Dica: Use uma lista em Python e retorne-a no endpoint
Seu Progresso

Faça login para salvar seu progresso.

Progresso do Capítulo
  • 1. API Overview
  • 2. Introdução à FastAPI
  • 3. Aprofundando FastAPI
  • 4. Pydantic
  • 5. FastAPI Project - Netbox Pt.1/3
  • 6. FastAPI Project - ZTP Pt.2/3
  • 7. FastAPI Project - Prometheus Pt.3/3
  • 8. Asynchronous Programming in FastAPI