È una linea sottile tra la scelta di un'interfaccia di programmazione dell'applicazione (API) e la decisione se è possibile utilizzarla o meno. La maggior parte delle API REST ha un'architettura generica e thread un percorso di richiesta comune. Ma alcune API là fuori si discostano dallo standard. Di conseguenza, diventano difficili da usare.
Pertanto, prima di creare l'intero software su un'API, è necessario eseguire controlli di qualità e assicurarsi che funzioni correttamente. Quindi cos'è il test API e come puoi testare un'API?
Che cos'è il test API?
Il test delle API comporta la valutazione iniziale della funzionalità, sicurezza, scalabilità, velocità e altro di un'API per vedere se è l'ideale per il programma che vuole utilizzarlo. Ma superficialmente, potrebbe comportare dei test per vedere se invia le risposte appropriate quando si effettuano richieste attraverso i suoi vari endpoint.
A seconda della sua struttura, durante il test di un'API, farai richieste (Get, Post, Update o Delete) ai relativi endpoint. Ci sono molte metriche da controllare durante i test API. Ma a un livello principiante, vuoi convalidare l'integrità di un'API dal suo codice di stato e assicurarti che recuperi e accetti i dati corretti.
A tal fine, come qualsiasi richiesta Web, un'API potrebbe restituire il codice di stato 200, 400 o 500 o anche altri.
La maggior parte delle API utilizza le risposte JSON per servire i propri payload. A seconda dell'obiettivo, altri possono accettare e rispondere con payload XML, multipart o HTML.
Come testare un'API usando Python e JavaScript
Sebbene su Internet siano disponibili molti strumenti di test dell'API dell'interfaccia utente grafica (GUI), è possibile valutare un'API in modo più critico con script scritti.
Un'API indica nella sua documentazione il tipo di richieste che consente e fornisce loro endpoint rilevanti. Quindi puoi prenderli e testarli usando i metodi di richiesta appropriati.
Correlati: che cos'è l'API REST e come puoi acquisire dati per la tua app o il tuo sito web?
A differenza della fase di produzione effettiva, il test API è grezzo. Quindi non hai bisogno della stessa specificità che avresti durante l'esecuzione dell'API per la produzione. Sebbene esistano diversi tipi di test API, in questo articolo ci concentreremo maggiormente sui test di convalida delle risposte.
Ci prova un'API negozio di falso in questo tutorial utilizzando JavaScript fetch e di Python richieste biblioteca. Durante questa operazione, testeremo gli endpoint per ottenere, pubblicare, aggiornare ed eliminare i dati.
Come testare un endpoint Get API con JavaScript
Come lo useresti in produzione, puoi testare un'API in JavaScript utilizzando Axios o il metodo fetch .
Per ottenere lo stato della risposta dall'API utilizzando fetch :
fetch('https://fakestoreapi.com/products', ).then(res =>{ console.log(res) })
La richiesta di cui sopra restituisce uno stato 200 se è una risposta valida. Dopo aver effettuato una richiesta con successo, puoi richiedere dati in tempo reale dall'API.
Prendiamo i dati da questa API:
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ console.log(response) }).catch(err => console.log(err))
La risposta al codice di recupero sopra è simile a questa:
Per ottenere il prezzo di tutti i prodotti, ad esempio, puoi utilizzare la funzione mappa :
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ response.map(data =>{ console.log(data.price) }) // console.log(response) }).catch(err => console.log(err))
Quanto sopra registra il seguente output:
Testare un Get Endpoint con Python
Come accennato in precedenza, Python utilizza anche la libreria delle richieste per accedere ai dati di un'API.
Per verificare lo stato della risposta in questo caso:
import requests data = requests.get('https://fakestoreapi.com/products') print(data.status_code)
La registrazione dei dati come abbiamo fatto sopra restituisce uno stato corrispondente. Però in questo caso sono 200.
Ora otteniamo gli stessi dati con Python come abbiamo fatto durante l'utilizzo di JavaScript:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() print(myData)
Il risultato di quanto sopra è simile a questo:
Puoi ottenere dati specifici usando il ciclo for .
Per ottenere i prezzi dei prodotti, ad esempio:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() indexes = 0 for i in myData: goods = myData[indexes] indexes +=1 print(goods["price"])
Ecco come appare l'output:
Testare un Post Endpoint con JavaScript
Dopo aver testato e visto che la richiesta Get funziona, a seconda del tuo obiettivo e di ciò che offre l'API, potresti voler verificare se puoi inserire anche dati in essa.
A differenza di come si effettua una richiesta Get , una richiesta Post accetta un payload. Inoltre, dovrai specificare che si tratta di una richiesta di Post:
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products', { method: "Post", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload to JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Il codice precedente registra il codice di stato della risposta e le nuove informazioni inserite quando lo esegui. Questo ti dice se la tua richiesta è andata a buon fine o meno. In genere, se il codice di stato è 200, l'API ha un endpoint valido che restituisce la risposta appropriata.
Test della richiesta di post con Python
È inoltre possibile verificare un post finale di un'API di Python usando requests.post . Come hai fatto durante l'utilizzo di fetch di JavaScript , devi specificare anche qui il payload:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.post('https://fakestoreapi.com/products', data = payload ) print(Posted.status_code) print(Posted.json())
Come JavaScript, il codice Python sopra riportato registra anche il codice di stato della risposta e i nuovi dati specificati all'interno del payload .
Testare gli Endpoint Put
L'aggiornamento dei dati API richiede lo stesso processo della pubblicazione e del loro ottenimento in entrambe le lingue.
Per fare ciò utilizzando il fetch di JavaScript , devi solo sostituire Post con Put :
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products/19', { method: "Put", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload into JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Se presti attenzione all'endpoint API, vedrai che questa volta include l'ID prodotto. Questo è il modo in cui l'API sa quali dati vuoi aggiornare in questo caso.
Tuttavia, alcune API potrebbero utilizzare altri metodi per creare i propri endpoint. Quindi non è uno standard.
Per testare l'aggiornamento dei dati dell'API utilizzando Python, usi invece request.put :
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.put('https://fakestoreapi.com/products/19', data = payload ) print(Posted.status_code) print(Posted.json())
Gli esempi precedenti, in caso di successo, inseriscono i nuovi dati nella posizione 19 come indicato dall'endpoint API.
Testare la richiesta di cancellazione
Eliminare i dati da un'API è facile come fare una richiesta Get. Questo perché, a differenza di Post e Put, non è necessario specificare alcun payload. Tutto ciò di cui hai bisogno è l'endpoint di eliminazione.
La nostra API scelta qui utilizza l'ID del prodotto per tenere traccia dei suoi dati. Quindi, eliminare un prodotto è facile:
fetch('https://fakestoreapi.com/products/19', { method: "Delete", headers:{ 'Content-Type': 'application/json' } } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Hai solo bisogno di poche righe di codice per ottenere la stessa cosa usando Python:
import requests Posted = requests.delete('https://fakestoreapi.com/products/19', ) print(Posted.status_code) print(Posted.json())
Entrambi gli esempi sopra registrano il codice di stato della risposta e i dati appartenenti all'id richiesto (19 in questo caso).
Questi metodi di test sono generici?
Sebbene in questo post ci siamo concentrati solo su una singola API, i metodi utilizzati per testare gli endpoint CRUD non sono diversi quando si tratta di altre API. L'unica differenza, ovviamente, potrebbe essere nelle regole che circondano ogni struttura API e nelle linee guida per la richiesta dei dati. Dopo averli decifrati per un'API scelta, è possibile utilizzare il metodo appropriato, come descritto qui, per testare gli endpoint corrispondenti.
Pertanto, poiché ogni API ha regole per connettersi ad essa, durante il test, alcune potrebbero fornire parametri aggiuntivi da includere nelle intestazioni della richiesta. Tali parametri di solito includono un token di accesso o altri come previsto nella documentazione.