Vai al contenuto principale

Padroneggiare le API Python: guida completa per creare e usare API in Python

Scopri come usare un'API Python per connettere i sistemi e portare dati in tempo reale nei tuoi progetti. Scopri come recuperare, inviare ed elaborare i dati e rendi le tue applicazioni dinamiche e reattive.
Aggiornato 3 giu 2026  · 8 min leggi

Le API, ovvero interfacce di programmazione delle applicazioni, sono le vere protagoniste dello sviluppo software moderno. Permettono a sistemi software diversi di comunicare tra loro, rendendo possibile integrare servizi e creare applicazioni. Padroneggiare le API è una competenza importante per chiunque voglia lavorare con i dati in Python, soprattutto se sei uno sviluppatore. Potresti sorprenderti dalle opportunità che si aprono: una volta imparata la competenza, puoi creare applicazioni web, connetterti a servizi esterni o persino usare dati in tempo reale in progetti di machine learning.

In questa guida esploreremo il mondo delle API, impareremo a usarle in Python, a costruirne di nostre con FastAPI e a gestire le sfide comuni che sicuramente incontrerai. Alla fine di questo tutorial avrai una solida comprensione di come usare le API nei tuoi progetti, rendendo il tuo processo di sviluppo più efficiente e le tue applicazioni più potenti. Se dovessi sentirti bloccato tra tutte le informazioni, prova il nostro corso Introduction to APIs in Python, che approfondisce ogni singola parte nel dettaglio.

Che cos'è un'API?

Un'API è come un ponte tra applicazioni software diverse. Consente a queste applicazioni di comunicare e condividere informazioni tra loro.

Immagina un'API come il cameriere in un ristorante. Dici al cameriere cosa vuoi (il tuo ordine) e lui comunica la richiesta alla cucina. La cucina prepara il cibo e il cameriere te lo porta. Allo stesso modo, invii una richiesta a un'API, che la elabora e poi restituisce i risultati.

Per rendere l'idea più concreta, considera alcuni usi reali: potresti, ad esempio, usare un'API pubblica per recuperare dati finanziari per un'analisi di borsa o per accedere a dati meteo in tempo reale per un modello di previsione climatica. Come avrai notato, le API sono particolarmente importanti quando lavori con dataset di grandi dimensioni e/o quando hai bisogno di dati in tempo reale; altrimenti, potresti non avere problemi con l'integrazione.

Come funziona un'API Python

Come funziona un'API Python. Immagine di Napkin.AI

Usare le API in Python

Usare le API in Python è un modo potente per interagire con servizi esterni, recuperare dati e integrare varie funzionalità nelle tue applicazioni. Python rende il lavoro con le API semplice ed efficiente, principalmente grazie alla libreria requests, che ti consente di inviare richieste HTTP per interagire con le API.

Introduzione alle API in Python

In Python, interagire con le API è un processo lineare grazie alla libreria requests. Questa libreria semplifica l'invio di richieste HTTP, permettendoti di comunicare con le API e recuperare o inviare dati.

Effettuare richieste API in Python

Prima di poter iniziare a effettuare richieste API in Python, ti serve la libreria requests. Puoi installarla con questo comando:

pip install requests

Le basi delle richieste API

Colleghiamo ora il nostro esempio concettuale del ristorante a ciò che avviene effettivamente in Python. Ecco la scomposizione semplificata:

  1. Trova il posto giusto: individua l'endpoint dell'API, cioè l'indirizzo web specifico a cui invierai la richiesta.

  2. Fai l'ordine: usa la libreria requests di Python per inviare la richiesta all'API. Specificherai che tipo di azione vuoi compiere (ad esempio ottenere dati o inviarli).

  3. Ricevi il piatto: l'API restituirà una risposta, che potrai elaborare per estrarre le informazioni di cui hai bisogno.

Richieste GET

Una richiesta GET è il tipo più comune di richiesta HTTP usata per recuperare dati da un server, simile a chiedere informazioni; quando digiti un URL nel browser e premi invio, invii essenzialmente una richiesta GET a quel server, specificando la risorsa desiderata, che il server elabora per trovare e preparare i dati richiesti prima di inviarli indietro in un formato come JSON o XML.

import requestsresponse = requests.get('https://api.example.com/data')data = response.json()print(data)

In questo esempio inviamo una richiesta GET a un'API fittizia e stampiamo la risposta JSON. Le richieste GET vengono comunemente usate per ottenere dati senza modificarli.

Richieste POST

Mentre le richieste GET recuperano dati, le richieste POST inviano istruzioni a un server. Sono spesso usate per creare nuove risorse (come aggiungere un utente) o aggiornare quelle esistenti (come modificare un profilo).

Immagina di compilare un modulo online per registrarti a un servizio. Quando fai clic su Invia, stai essenzialmente inviando una richiesta POST con le tue informazioni. Ecco un esempio semplificato:

# Data to send (like user information)data = {'name': 'John Doe', 'email': '[email protected]'}# Send the data to the API (replace the URL with the actual API endpoint)response = requests.post('https://api.example.com/users', json=data)# Check if the request was successful (usually a status code of 201 for creation)if response.status_code == 201:    print("User created successfully!")else:    print("Error:", response.status_code)

Questo esempio invia un dizionario con le informazioni dell'utente come dati JSON all'API. Poi controlliamo il codice di stato della risposta per verificare se l'utente è stato creato correttamente.

Gestire le risposte

Quando effettui una richiesta API, il server invia una risposta che include due elementi chiave:

  • Codice di stato: un numero che indica il successo o il fallimento della richiesta. Ad esempio, 200 di solito significa successo, mentre 404 indica che la risorsa non è stata trovata.
  • Dati: le informazioni che hai richiesto, spesso in formato JSON. È qui che risiede il contenuto di valore.

Ecco un esempio in Python:

response = requests.get('https://api.example.com/data')if response.status_code == 200:    data = response.json()    print(data)   else:    print(f"Request failed with status code {response.status_code}")   

Capire i codici di stato delle API Python

I codici di stato delle API sono risposte standardizzate che i server inviano per indicare l'esito della richiesta di un client. Questi codici aiutano gli sviluppatori a capire se una richiesta è andata a buon fine, se si è verificato un errore o se è necessaria un'azione ulteriore.

Codici di stato comuni

  • 200 OK: questo codice indica che la richiesta è andata a buon fine. Ad esempio, quando fai una richiesta GET per recuperare dati da un'API, una risposta 200 OK significa che i dati sono stati recuperati correttamente.  

  • 404 Not Found: questo codice viene restituito quando il server non riesce a trovare la risorsa richiesta. Per esempio, se provi ad accedere a un endpoint che non esiste, riceverai un errore 404 Not Found.

  • 500 Internal Server Error: questo codice segnala che qualcosa è andato storto lato server. È un messaggio di errore generico che può verificarsi per vari motivi, come bug nel codice del server o problemi con il database.

Gestire i diversi codici di stato

Gestire efficacemente i codici di stato API nelle tue applicazioni Python garantisce che il codice si comporti in modo prevedibile e gestisca gli errori con grazia. Se la risposta è 200, procedi con l'elaborazione dei dati restituiti. In caso di errore 404, verifica che l'URL dell'endpoint sia corretto e, se necessario, implementa una logica di fallback o informa l'utente che la risorsa non è disponibile. Per gli errori 500, valuta di riprovare la richiesta dopo un breve intervallo o registra l'errore per ulteriori indagini. Evita però i tentativi eccessivi per non sovraccaricare il server.

Creare API Python

Creare API con Python ti permette di realizzare interfacce applicative potenti ed efficienti. La semplicità di Python e le sue librerie robuste lo rendono un'ottima scelta per lo sviluppo di API.

Introduzione a FastAPI

Ora che sai come usare le API, vediamo come possiamo costruirne di nostre. FastAPI è un framework web moderno e veloce (ad alte prestazioni) per creare API con Python. Come suggerisce il nome, è progettato per essere facile da usare. Una cosa che mi piace di FastAPI è che genera automaticamente documentazione interattiva.

Configurare FastAPI

Per iniziare, ti servono Python e il suo gestore pacchetti, pip, installati. Successivamente, installa FastAPI e Uvicorn, un server ASGI ad alte prestazioni:

pip install fastapi uvicorn

Nota a margine: se riscontri problemi con l'installazione di Python o pip, dai un'occhiata al nostro tutorial: How to Upgrade Python and Pip in Windows, MacOS, and Linux.

Creare una semplice API

Costruiamo un'API essenziale che restituisce un semplice saluto:

from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root():    return {"Hello": "World"}

Per avviare questa API, esegui il seguente comando:

uvicorn main:app --reload

Questo comando avvia il server Uvicorn, servendo la tua API su http://127.0.0.1:8000. Accedendo a questo URL nel browser otterrai la risposta {"Hello": "World"}.

Funzionalità avanzate di FastAPI

FastAPI non serve solo a creare rapidamente API semplici; offre anche una serie di funzionalità avanzate che lo rendono adatto ad applicazioni complesse e ad alte prestazioni. Ecco alcune capacità chiave: 

Parametri di query

In FastAPI, aggiungere e gestire i parametri di query è semplice grazie all'uso degli hint di tipo di Python. I parametri di query fanno parte dell'URL e servono a passare dati opzionali all'endpoint dell'API, spesso per filtrare o modificare i dati restituiti.

Aggiungere parametri di query

Per aggiungere un parametro di query in FastAPI, lo definisci semplicemente come argomento della funzione dell'operazione di percorso. Se un parametro è opzionale, puoi assegnargli un valore predefinito, come None. Ad esempio, supponiamo di avere un endpoint che recupera elementi da un database. Vuoi permettere agli utenti di filtrare gli elementi con una query di ricerca:

app = FastAPI()@app.get("/items/")def read_items(q: str = None):    if q:        return {"items": ["Item 1", "Item 2", "Item 3"], "query": q}    return {"items": ["Item 1", "Item 2", "Item 3"]}

In questo esempio, q è un parametro di query opzionale. Se forniamo un valore per q, i risultati vengono filtrati in base a quella query. Se q non è fornito, l'endpoint restituisce tutti gli elementi.

Gestire i parametri di query

FastAPI gestisce automaticamente i parametri di query, inclusa la validazione e conversione dei tipi. Ad esempio, se specifichi un parametro di query come intero, FastAPI validerà che l'input sia effettivamente un intero. Se l'input non corrisponde al tipo atteso, FastAPI restituisce un messaggio di errore chiaro.

Ecco un esempio con un parametro di query obbligatorio e la validazione dei tipi:

@app.get("/items/{item_id}")def read_item(item_id: int, q: str = None):    return {"item_id": item_id, "query": q}

In questo caso, item_id è un parametro di percorso e q è un parametro di query opzionale. FastAPI garantirà che item_id sia un intero ed elaborerà il parametro di query q se fornito.

Gestire diversi metodi HTTP

Implementare metodi HTTP diversi come GET, POST, PUT e DELETE è semplice e rispecchia il modo in cui si definiscono le route in altri framework. Ogni metodo è legato a un tipo di operazione specifico, come recuperare dati (GET), creare nuovi dati (POST), aggiornare dati esistenti (PUT) o eliminare dati (DELETE).

Metodo GET

Il metodo GET viene usato per recuperare dati dal server. In FastAPI, definisci un endpoint GET così:

@app.get("/items/")def get_items():    return {"items": ["Item 1", "Item 2", "Item 3"]}

Metodo POST

Il metodo POST viene usato per creare nuovi dati. Puoi definire un endpoint POST e ricevere dati nel corpo della richiesta:

@app.post("/items/")def create_item(item: dict):    return {"item": item}

Metodo PUT

Il metodo PUT viene usato per aggiornare dati esistenti. Di solito richiede sia un identificatore sia i nuovi dati:

@app.put("/items/{item_id}")def update_item(item_id: int, item: dict):    return {"item_id": item_id, "updated_item": item}

Metodo DELETE

Il metodo DELETE viene usato per rimuovere dati. In FastAPI, un endpoint DELETE è definito così:

@app.delete("/items/{item_id}")def delete_item(item_id: int):    return {"message": f"Item {item_id} deleted"}

Autenticazione e sicurezza

FastAPI offre diversi meccanismi per implementare autenticazione e sicurezza:

  • HTTP Basic Auth: un metodo semplice, ma in genere non consigliato in ambienti di produzione per motivi di sicurezza.
  • API Key: un'opzione più sicura che prevede la generazione di chiavi uniche per i client.
  • OAuth 2.0: uno standard complesso ma robusto per l'autorizzazione, comunemente usato per integrazioni di terze parti.
  • JSON Web Token (JWT): un approccio diffuso per rappresentare attestazioni in modo sicuro tra due parti.

Considerazioni sulle prestazioni delle API Python

Vediamo alcune considerazioni sulle prestazioni delle API in Python.

Efficienza delle richieste API

L'efficienza delle richieste API può incidere in modo significativo sulle prestazioni complessive della tua applicazione. Metodi diversi di richiesta API hanno complessità temporali differenti:

  • Richieste GET: sono generalmente veloci, poiché sono progettate per recuperare dati senza causare modifiche sul server. Tuttavia, le prestazioni possono degradare con dataset di grandi dimensioni.
  • Richieste POST: possono richiedere più tempo perché comportano l'invio di dati al server per l'elaborazione o l'archiviazione.
  • Richieste PUT e DELETE: la complessità temporale qui può variare a seconda del tempo di risposta del server e delle operazioni eseguite.

Per aumentare l'efficienza, riduci al minimo la dimensione dei dati inviati o recuperati e valuta l'uso di operazioni in blocco quando possibile.

Ottimizzare l'uso delle API

Ecco alcuni suggerimenti per ottimizzare le prestazioni delle chiamate API in Python:

  • Richieste in batch: combina più chiamate API in un'unica richiesta quando possibile per ridurre l'overhead.
  • Caching delle risposte: archivia localmente i dati richiesti di frequente per ridurre il numero di chiamate API.
  • Richieste asincrone: usa librerie asincrone come aiohttp per gestire più richieste contemporaneamente, riducendo i tempi di attesa.
  • Connection pooling: riutilizza le connessioni invece di crearne una nuova per ogni richiesta, così da ridurre la latenza.

Errori comuni delle API Python e come gestirli

Quando lavori con le API, potresti incontrare vari errori che possono interrompere la funzionalità della tua applicazione. Ecco due problemi comuni e come affrontarli efficacemente.

Gestire gli errori di timeout

Gli errori di timeout sorgono quando una richiesta API non riceve una risposta entro il tempo previsto. Questi errori possono essere causati da vari fattori, inclusi congestione di rete, sovraccarico del server, elaborazioni dati estese o limiti di frequenza dell'API. Per affrontarli è consigliabile adottare strategie come estendere la durata del timeout, utilizzare meccanismi di retry con backoff esponenziale, ottimizzare i payload delle richieste e ricorrere alla programmazione asincrona. Può essere utile anche implementare una gestione degli errori e un logging robusti per individuare la causa dei timeout e mettere in atto le contromisure necessarie.

Gestire i limiti di frequenza

I limiti di frequenza sono spesso imposti dalle API per impedire abusi, garantire un consumo equo e preservare la stabilità del servizio. Queste limitazioni, di solito espresse come richieste al minuto o all'ora, fissano un tetto al numero totale di richieste che si possono effettuare in un determinato intervallo di tempo. Se si superano queste soglie, possono verificarsi blocchi temporanei, risposte lente o il rifiuto completo dell'accesso all'API. Per gestire i limiti di frequenza, usa tecniche come il backoff esponenziale, applica il caching e monitora attentamente l'utilizzo dell'API. È essenziale comprendere le politiche specifiche di rate limit dell'API per evitare interruzioni del servizio.

Alternative alle richieste API standard

Sebbene le API siano il metodo preferito per accedere ai dati, ci sono situazioni in cui alternative possono essere più adatte. Di seguito due alternative comuni all'uso di richieste API standard in Python.

Usare il web scraping

Quando le API non sono disponibili, sono insufficienti o non sono praticabili, il web scraping è una tecnica per estrarre dati dai siti web. Elaborando il testo HTML, puoi ottenere informazioni che altrimenti potrebbero non essere disponibili. Tuttavia, è importante rispettare i termini di servizio dei siti, evitare di sovraccaricare i server e considerare le implicazioni etiche e legali. Moduli Python noti come BeautifulSoup, Scrapy e Selenium rendono il web scraping più semplice.

Accesso diretto al database

L'accesso diretto al database offre un approccio più immediato e potenzialmente più veloce al recupero dei dati rispetto alle API. Se hai le autorizzazioni necessarie e una chiara comprensione della struttura del database, puoi aggirare le limitazioni dell'API ed eseguire query personalizzate con strumenti come SQLAlchemy o psycopg2. Tuttavia, questo metodo richiede un'attenta considerazione di sicurezza, prestazioni e integrità dei dati, poiché interazioni dirette con il database possono introdurre vulnerabilità se non gestite correttamente.

Conclusione

Ora conosci le basi per creare e usare API, incluso come usare il flessibile framework FastAPI. Inoltre, sai come superare ostacoli frequenti come limiti di frequenza e timeout. Un'interazione efficace con le API è essenziale nello sviluppo Python contemporaneo, perché ti consente di sfruttare grandi dataset e poi costruire soluzioni innovative. 

Naturalmente, i processi sono in continua evoluzione. Le chiavi per diventare esperto sono la sperimentazione, l'apprendimento costante e l'applicazione nel mondo reale. È anche per questo che DataCamp ha investito tanto in risorse come il nostro corso Introduction to APIs in Python, così puoi esercitarti davvero e diventare esperto. Anche il nostro corso Streamlined Data Ingestion with pandas è un'altra ottima opzione. Iscriviti oggi stesso!


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Technical writer specializzato in AI, ML e data science: rende idee complesse chiare e accessibili.

Argomenti

Impara Python con DataCamp

Corso

Introduzione a Python

4 h
6.9M
Impara le basi dell’analisi dei dati con Python in sole 4 ore. Questo corso online ti introduce all’interfaccia di Python e ai pacchetti più usati.
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Mostra altroMostra altro