๐ API & Protocol Documentation: OpenAPI & AsyncAPI
Principio: “An API is only as good as its documentation.”
::: info La documentazione delle interfacce di comunicazione definisce come i diversi moduli del sistema “parlano” tra loro. Utilizziamo standard aperti per generare documentazione interattiva che permetta di testare le chiamate senza scrivere codice client. :::
1. REST APIs: Lo standard OpenAPI (Swagger)
OpenAPI รจ il linguaggio standard per descrivere le REST API. Permette di definire endpoint, parametri di input, schemi di risposta e metodi di autenticazione.
Integrazione Automatica con FastAPI
Uno dei maggiori vantaggi di FastAPI (Python) รจ la generazione automatica dello schema OpenAPI partendo dai modelli Pydantic.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Device(BaseModel):
id: int
name: str
status: str = "offline"
@app.post("/devices/", status_code=201)
async def create_device(device: Device):
"""
Registra un nuovo dispositivo IoT nel sistema.
- **id**: Identificativo univoco hardware
- **name**: Nome mnemonico del dispositivo
- **status**: Stato iniziale (default: offline)
"""
return device
- Accesso: Una volta avviato il server, la documentazione interattiva รจ disponibile a
/docs(Swagger UI) o/redoc.
2. Event-Driven Systems: AsyncAPI
Mentre OpenAPI gestisce il paradigma “Richiesta/Risposta”, AsyncAPI รจ lo standard per i sistemi basati su messaggi (Publish/Subscribe), come quelli che utilizzano MQTT (fondamentale per Home Assistant e Zigbee2MQTT).
Elementi di AsyncAPI:
- Channels: I “topic” su cui viaggiano i messaggi (es.
tele/sonoff/SENSOR). - Messages: La struttura del payload (solitamente JSON).
- Bindings: Il protocollo utilizzato (MQTT, AMQP, WebSockets).
# Esempio concettuale di AsyncAPI per MQTT
channels:
home/livingroom/temperature:
publish:
message:
payload:
type: object
properties:
temp:
type: number
humidity:
type: number
๐ Architettura della Comunicazione (Mermaid)
๐ ๏ธ Best Practices per API Professionali
- Versioning: Includi sempre la versione nell’URL (es.
/api/v1/devices). Questo evita di “rompere” i client esistenti quando effettui modifiche strutturali. - Status Codes Semantici: Usa correttamente i codici HTTP:
200 OK: Successo.201 Created: Risorsa creata con successo.400 Bad Request: Errore di validazione input.401 Unauthorized: Autenticazione mancante.404 Not Found: Risorsa inesistente.
- Schema Validation: Definisci sempre modelli di input/output rigorosi (Pydantic in Python, Struct/Classes in C++). Non accettare mai “JSON generico”.
- Security Schemes: Documenta chiaramente se l’API richiede
API-Key,OAuth2oJWT Token.
Ultimo aggiornamento: {{UPDATE_DATE}} | Tags: #OpenAPI #Swagger #FastAPI #AsyncAPI #MQTT #REST