Salta al contenuto

Python e API: come utilizzare le richieste Python per creare app basate su API

Ciao! Stai cercando di migliorare le tue competenze Python e imparare come integrare potenti API nelle tue applicazioni? Allora questa guida fa per te.

Ti guiderò attraverso l'utilizzo della fantastica libreria Python Requests per interagire con API Web di tutti i tipi. Con alcune conoscenze e richieste di base di Python, sarai in grado di:

  • Esegui query sui dati da qualsiasi endpoint API
  • Crea app che si integrano con servizi popolari come Twitter, Stripe, Twilio ecc.
  • Automatizza i flussi di lavoro collegando le API tra loro
  • Sblocca tantissimi dati e funzionalità utili per migliorare le tue app Python

Sembra eccitante, vero? Immergiamoci!

Perché utilizzare le API in Python?

Prima di entrare nel codice, capiamo innanzitutto perché la connessione alle API è molto utile per gli sviluppatori.

Le API consentono a diverse applicazioni software di comunicare tra loro. Le aziende e le organizzazioni espongono le API per consentire agli sviluppatori di creare app con i loro servizi più facilmente.

Ecco alcuni dei motivi principali per utilizzare le API nel codice:

  • Risparmia tempo – Non ricostruire da zero qualcosa che già esiste come API!
  • Sfrutta i dati – Accedi a fonti di dati utili come meteo, azioni, social media e altro ancora.
  • Estendi funzionalità – Integra mappe, pagamenti, notifiche e altro ancora.
  • Automatizza i flussi di lavoro – Collega diversi sistemi insieme senza soluzione di continuità.
  • Crea app più velocemente – Concentrati sulla logica della tua app piuttosto che sull'infrastruttura sottostante.

In breve, API ben progettate ti aiutano a sviluppare applicazioni migliori, più velocemente.

Secondo Rapporto sullo stato dell'API 2024 di Postman, l'adozione delle API pubbliche sta crescendo rapidamente:

  • Il 72% delle organizzazioni utilizza le API pubbliche come parte del proprio core business.
  • Il 58% dispone di API pubbliche.
  • Le richieste API per i risponditori sono cresciute di oltre il 650% dal 2020 al 2021.

Con le API che diventano sempre più diffuse in tutti i settori, è un ottimo momento per migliorare le tue competenze per connetterti ad esse con Python.

Iniziare con le richieste Python

Python ha librerie fantastiche che semplificano il lavoro con le API. Il più popolare è Richieste.

Requests ti consente di chiamare le API con poche righe di codice:

import requests

response = requests.get(‘https://api.data.gov/education‘)

Rispetto alle alternative di livello inferiore come il built-in di Python urllib modulo, Requests ti fa risparmiare un sacco di tempo e mal di testa.

Alcune caratteristiche chiave di Requests:

  • API semplice ed elegante
  • Rende le richieste HTTP estremamente semplici
  • Supporto JSON integrato
  • Gestione di intestazioni, parametri, autenticazione
  • Nuovi tentativi automatici in caso di errori di rete
  • Ampia gamma di funzionalità avanzate

Per installare Requests, esegui semplicemente:

pip install requests

Poi import requests nel tuo codice e sei pronto per iniziare a effettuare chiamate API!

Esaminiamo alcuni semplici esempi.

Effettuare una richiesta GET

La chiamata API più comune è una richiesta GET per recuperare dati da un endpoint.

Ecco come effettuare una richiesta GET con Requests:

import requests 

response = requests.get(‘https://api.github.com/repos/requests/requests‘)

Ciò invierà una richiesta GET all'endpoint API GitHub per recuperare i dati nel repository Requests.

Torniamo a Response oggetto contenente il codice di stato, le intestazioni di risposta e i dati.

Per stampare il codice di stato della risposta:

print(response.status_code)

>>> 200

Un codice di stato pari a 200 indica che la nostra richiesta è riuscita. Esistono molti altri codici di stato che indicano errori o guasti: tratteremo come gestirli in seguito.

Per accedere ai dati di risposta è sufficiente chiamare .json():

data = response.json()

print(data[‘stargazers_count‘])

>>> 64245

I dati vengono analizzati automaticamente come JSON. Ciò rende il lavoro con le API JSON molto semplice.

Passaggio di parametri

Per molte API è necessario passare parametri per filtrare i dati, impaginare i risultati e altro ancora.

Passa i parametri come dizionario al file params argomento:

params = {‘type‘: ‘owner‘, ‘sort‘: ‘updated‘}
response = requests.get(‘https://api.github.com/repos/kennethreitz/requests‘, 
                        params=params)

Requests codifica i parametri e li aggiunge all'URL per te.

Puoi anche passare i parametri direttamente nell'URL:

response = requests.get(‘https://api.github.com/repos/kennethreitz/requests?type=owner&sort=updated‘)

In entrambi i casi funziona, ma passare un dizionario è considerato più pulito.

POST Richieste

Per creare risorse sul server, utilizzeresti una richiesta POST.

Passa i dati da pubblicare come dizionario nel file json parametro:

data = {‘name‘: ‘John Smith‘, ‘email‘: ‘[email protected]‘}
response = requests.post(‘https://api.example.com/users‘, json=data)

Questo codifica i dati come JSON e invia un POST all'API per creare una nuova risorsa utente.

Per i POST dovresti convalidare anche il codice di stato restituito:

if response.status_code == 201:
  print(‘User created!‘)

Lo stato 201 significa che la risorsa è stata creata correttamente sul server.

METTI, AGGIUNGI, ELIMINA

Oltre a GET e POST, gli altri metodi HTTP comuni sono:

  • PUT – Aggiorna una risorsa esistente
  • PATCH – Aggiornamento parziale di una risorsa
  • DELETE – Elimina una risorsa

Funzionano in modo simile, basta chiamare il metodo corrispondente requests:

# PUT - Update user
requests.put(‘https://api.example.com/users/123‘, json=updated_data) 

# PATCH - Partial update  
requests.patch(‘https://api.example.com/users/123‘, json=partial_data)

# DELETE - Delete user
requests.delete(‘https://api.example.com/users/123‘)

Ora sai come effettuare chiamate API utilizzando tutti i metodi HTTP comuni!

Gestione delle risposte API

Quando si lavora con le API, è necessario gestire i dati di risposta in base al codice di stato restituito dal server.

Le API utilizzano codici di stato HTTP standard per indicare successo, errori o fallimenti. Alcuni comuni includono:

  • 200 – OK – La richiesta è riuscita
  • 201 – Creato: la risorsa è stata creata correttamente
  • 400 – Richiesta errata: la richiesta non era valida o presentava dati mancanti
  • 401 – Non autorizzato – È richiesta l'autenticazione
  • 403 – Proibito – Non hai accesso a questa risorsa
  • 404 – Non trovato – La risorsa non esiste
  • 500 – Errore server: il server ha riscontrato un errore imprevisto

Controlla il codice di stato sull'oggetto Response:

response = requests.get(‘https://api.example.com/items/123‘)

if response.status_code == 200:
  # Success!
elif response.status_code == 404:
  # Notify user item does not exist

Per brevità, ti consiglio di racchiudere tutte le chiamate di Requests in una funzione di supporto come:

def make_api_request(endpoint):
  response = requests.get(endpoint)

  response.raise_for_status()

  return response.json()

Ciò rende il codice più pulito e centralizza la gestione degli errori in un unico posto.

raise_for_status() solleverà un'eccezione se è presente un codice di errore HTTP come 500 o 404, evitandoti di controllare manualmente ogni volta.

Autenticazione con API

Molte API richiedono l'autenticazione per limitare l'accesso. Alcune forme comuni di autenticazione API includono:

  • Chiavi API – Passare una chiave API univoca tramite un'intestazione o un parametro della richiesta
  • Autenticazione di base – Passare un nome utente e una password con la richiesta
  • Gettoni al portatore – Invia un token bearer OAuth 2.0 dal provider di autenticazione
  • Aut. digest – Simile all'autenticazione di base ma le credenziali sono crittografate

Le richieste semplificano la gestione dell'autenticazione.

Per utilizzare una chiave API, passala come intestazione:

headers = {‘Authorization‘: ‘Bearer YOUR_API_KEY‘}
response = requests.get(‘https://api.example.com‘, headers=headers)

Per l'autenticazione di base, fornisci nome utente e password come tupla:

requests.get(‘https://api.example.com‘, 
            auth=(‘username‘, ‘password‘))

Le richieste gestiranno correttamente la codifica delle tue credenziali.

Per i token al portatore di fornitori OAuth come Facebook, Twitter, Google ecc.:

params = {‘access_token‘: ‘OAUTH_TOKEN‘}
requests.get(‘https://api.example.com‘, params=params)  

Passa il token di accesso come parametro e Requests gestirà il resto.

Un'autenticazione corretta è fondamentale per accedere in modo sicuro alle API nelle app e nei flussi di lavoro Python.

Best practice per lavorare con le API

Ora che lo sai come per chiamare le API con Python, discutiamo alcune best practice per lavorare in modo efficace con esse:

Gestisci gli errori con garbo

Le API possono fallire in modi imprevisti: i server si interrompono, le reti si interrompono, i provider apportano modifiche.

Quando si effettuano richieste API:

  • Utilizza i blocchi try/eccetto per individuare gli errori
  • Gestisci le eccezioni comuni come ConnectionErrors
  • Controlla i codici di stato e gestisci le risposte non 200
  • Utilizza una strategia di backoff esponenziale per ritentare le richieste non riuscite

Ciò garantisce che la tua applicazione si degradi regolarmente quando le API falliscono.

Rispettare i limiti di velocità

Per prevenire abusi, le API applicano limiti di velocità sulle richieste per ora/giorno.

Il superamento di questi limiti bloccherà il tuo accesso, possibilmente in modo permanente.

Per evitare questo:

  • Esaminare la documentazione sui limiti di velocità e capire la tua quota
  • Limita le richieste – effettuare chiamate solo quando necessario
  • Implementare un timer di backoff se raggiungi il limite, fai una pausa prima di riprovare
  • Non inviare mai spam o abusare dell'API! Ciò porterà a blocchi.

I limiti di velocità proteggono le API in modo che funzionino per tutti gli utenti. Rispettali nel tuo utilizzo.

Risposte nella cache

Le API possono essere lente a seconda della connettività. Per quanto riguarda le prestazioni, prendi in considerazione la memorizzazione nella cache delle risposte, soprattutto se i dati non cambiano frequentemente.

Le librerie di memorizzazione nella cache Python più diffuse includono Redis, Memcached e SQLAlchemy.

La memorizzazione nella cache evita chiamate di rete non necessarie per richieste ripetute.

Esempi e usi dell'API Python

Ora diamo un'occhiata ad alcuni esempi reali di API popolari e a come accedervi in ​​Python.

API di Twitter

L'API di Twitter consente di interrogare tweet, utenti, hashtag e analisi. È necessario richiedere un account sviluppatore Twitter per ottenere le credenziali API.

installare il pipì libreria per un'interfaccia API Twitter più amichevole:

pip install tweepy

Esempio di recupero di tweet per un hashtag:

import tweepy

client = tweepy.Client(bearer_token=TWITTER_TOKEN)

tweets = client.search_recent_tweets(query="#python")

for tweet in tweets.data:
   print(tweet.text)

Vedere la documenti stupidi per ulteriori dettagli.

API GitHub

L'API GitHub consente l'accesso programmatico a repository, codice, utenti e altro GitHub senza autenticazione.

Esempio di recupero dei repository di un utente:

import requests

response = requests.get(‘https://api.github.com/users/kennethreitz/repos‘)

for repo in response.json():
  print(repo[‘name‘]) 

Vedere la Documenti API GitHub per più casi d'uso.

API Stripe

L'API Stripe consente di integrare pagamenti in app e siti Web.

installare il striscia libreria e importazione:

pip install stripe

import stripe

Esempio di creazione di un addebito:

stripe.api_key = ‘STRIPE_SECRET_KEY‘ 

charge = stripe.Charge.create(
  amount=1000,
  currency=‘usd‘,
  source=‘tok_visa‘ # Token from Stripe.js
)

Stripe gestisce per te il pesante carico dei pagamenti.

See Documenti API di Stripe per il riferimento API completo.

Ci sono tantissime altre fantastiche API là fuori come Slack, Twilio, Google Maps, AWS e altre ancora! La chiave è trovare l'origine dati giusta per la tua applicazione e sfruttare la potenza delle API.

Conclusione

Spero che questa guida abbia fornito una panoramica utile su come effettuare richieste API in Python utilizzando la libreria Requests. Ecco alcuni punti chiave:

  • Richieste semplifica la chiamata delle API: installalo utilizzando pip
  • Utilizza metodi HTTP comuni come GET, POST, PUT, DELETE per le operazioni CRUD
  • Passa facilmente parametri, autenticazione, intestazioni e dati
  • Gestire correttamente i codici di stato e gli errori
  • Implementa le migliori pratiche come la limitazione della velocità e la memorizzazione nella cache
  • Integra fantastiche API come Twitter, GitHub, Stripe e altre ancora!

Le API ti aiutano a creare app migliori più velocemente consentendoti di sfruttare i dati e i servizi esistenti. Python e Requests rappresentano un ottimo modo per sfruttare la potenza delle API nel tuo codice.

Per i passaggi successivi, ti consiglio di consultare il file official Richieste documenti, leggendo la documentazione API di tutti i servizi che desideri integrare e rivedendo alcuni repository utilizzando API Python come questo.

Spero che questa guida ti sia stata utile! Fammi sapere se hai altre domande sull'utilizzo di Python e delle API. Buona programmazione!

Partecipa alla conversazione

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *