Python è uno dei linguaggi di programmazione più facili da leggere e da scrivere di tutti i tempi. Nel corso degli anni, la popolarità di Python è solo aumentata ed è ampiamente utilizzato nello sviluppo di applicazioni web, nello scripting, nella creazione di giochi, nell'informatica scientifica, ecc.
Flask è un framework di applicazioni Web Python che sta guadagnando popolarità grazie alla sua facilità d'uso per i principianti di Python. In questo tutorial, daremo un'occhiata a EVE, un framework per la creazione di API REST basato su Flask, MongoDB e Redis. Dai documenti ufficiali:
Fornito da Flask, MongoDB, Redis e le buone intenzioni Eve consente di creare e distribuire facilmente un servizio Web RESTful altamente personalizzabile e completo.
Cosa creeremo
In questo tutorial vedremo come creare API REST utilizzando il framework EVE. Successivamente, utilizzando AngularJS progetteremo il front-end per un'app semplice e la renderemo funzionale utilizzando le API REST create utilizzando EVE. In questo tutorial implementeremo la seguente funzionalità:
- Crea API utente
- Convalida API utente
- API Aggiungi elementi
- Elimina API elementi
- Aggiorna API degli elementi
Per iniziare
Installazione
Useremo pip per installare EVE.
pip install eve
Useremo MongoDB
come banca dati. Dai un'occhiata ai documenti ufficiali per l'installazione secondo il tuo sistema.
Creazione dell'API di base
Crea una cartella di progetto chiamata PythonAPI
. Vai a PythonAPI
e crea un file chiamato api.py
. All'interno di api.py
importa EVE
e crea un oggetto EVE.
from eve import Eve app = Eve()
Quindi, esegui app
quando il programma viene eseguito come programma principale.
from eve import Eve app = Eve() if __name__ == '__main__': app.run()
Esegui il tuo MongoDB
utilizzando il seguente comando:
mongod --dbpath= <PATH-TO> /data/db/
Come puoi vedere, dobbiamo specificare un percorso per i file db. Crea semplicemente data/db
nel tuo file system ed esegui il comando precedente.
Insieme a un'istanza di MongoDB
in esecuzione, EVE richiede un file di configurazione con informazioni sulle risorse API. Quindi nella PythonAPI
cartella crea un altro file chiamato settings.py
e aggiungi il seguente codice:
DOMAIN = {'user': {}}
Il codice sopra informa EVE che è una risorsa per user
è disponibile.
Salva tutti i file ed esegui api.py
:
python api.py
L'API dovrebbe essere online come mostrato:
Utilizzeremo il client REST di Postman per inviare richieste alle API. È gratuito e può essere installato con un semplice clic. Al termine dell'installazione, avvia l'app e inserisci l'URL dell'API (http://127.0.0.1:5000/) e fai clic su invia. Dovresti avere la risposta come mostrato:
Poiché non abbiamo chiamato alcuna risorsa API specifica, mostrerà tutte le risorse disponibili. Ora prova a chiamare l'user
risorsa e dovresti avere la risposta specifica per l'user
.
Crea e convalida l'API utente
Crea API utente
Inizieremo creando un'API per creare o registrare un utente per la nostra applicazione. L'utente dovrebbe avere determinati campi come First Name
, Last Name
, Username
, Password
e Phone Number
.
Quindi prima dovremo definire uno schema per un utente. Schema definisce i campi e i tipi di dati dei campi chiave. Apri settings.py
e modifica il DOMAIN
definendo uno schema come mostrato :
DOMAIN = { 'user': { 'schema': { 'firstname': { 'type': 'string' }, 'lastname': { 'type': 'string' }, 'username': { 'type': 'string', 'unique': True }, 'password': { 'type': 'string' }, 'phone': { 'type': 'string' } } } }
Come puoi vedere nel codice sopra, abbiamo definito i campi chiave necessari per creare un utente e il suo tipo di dati definito nello schema. Salva le modifiche ed esegui api.py
. Da Postman Client, prova a eseguire una richiesta POST insieme ai parametri richiesti a http://127.0.0.1/user come mostrato:
Su richiesta POST all'utente, ha lanciato un 405 Method Not Allowed
errore. Per impostazione predefinita, EVE accetta solo richieste GET. Se vogliamo usare qualsiasi altro metodo dobbiamo definirlo esplicitamente. Apri settings.py
e definire i metodi delle risorse come mostrato:
RESOURCE_METHODS = ['GET', 'POST']
Salva le modifiche ed esegui api.py
. Ora riprova a POST
all'utente e dovresti avere la seguente risposta:
Come puoi vedere, la richiesta POST di cui sopra ha avuto successo. Non abbiamo definito le configurazioni del database nel nostro settings.py
, quindi EVE ha completato la richiesta utilizzando l'istanza in esecuzione di MongoDB
. Accediamo al MongoDB
shell e vedere il record appena creato. Con l'istanza MongoDB in esecuzione, attiva la shell mongo:
mongo
Una volta dentro il mongo
shell, elenca tutti i database disponibili.
show databases;
Deve esserci un eve
Banca dati. Passa a eve
banca dati.
use eve;
Esegui lo show
comando per elencare le tabelle all'interno di eve
banca dati.
show tables;
Le tabelle elencate devono avere una tabella denominata user
. Elenca i record dell' user
tabella utilizzando il seguente comando:
db.user.find()
Ecco i record selezionati dalle tabelle utente:
Convalida API utente
Successivamente creeremo un'API per convalidare un utente esistente. Normalmente, se facciamo un get
richiesta all'endpoint utente (http://127.0.0.1:5000/user), fornirà i dettagli di tutti gli utenti registrati dal database. Abbiamo bisogno di implementare due cose qui. Innanzitutto dobbiamo autenticare un utente utilizzando nome e password, e in secondo luogo dobbiamo restituire i dettagli dell'utente dal database in caso di autenticazione riuscita.
Per ottenere i dettagli in base al nome, dobbiamo aggiungere un ulteriore campo di ricerca nel DOMAIN
in settings.py
.
'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'username', }
Come visto nel codice sopra, abbiamo aggiunto un campo di ricerca per username
. Ora, quando una richiesta GET viene inviata a http://127.0.0.1:5000/user/
<username>
restituirà i dettagli dell'utente con il particolare username
. Quando effettui una richiesta a un determinato utente, invieremo anche il username
e password
per l'autenticazione.
Effettueremo l'autenticazione di base per verificare un determinato utente in base a nome utente e password. Per prima cosa, dobbiamo importare Basic Auth
classe da EVE. Crea una classe chiamata Authenticate
per implementare l'autenticazione come mostrato:
from eve.auth import BasicAuth class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method):
Ora, quando la risorsa è user
e il metodo di richiesta è GET
, autenticheremo l'utente. In caso di autenticazione riuscita, verranno restituiti i dettagli utente dell'utente con nome nell'endpoint API. Limiteremo anche la creazione di utenti fornendo un nome utente e una password. Quindi, se il metodo è POST e l'endpoint API è l'utente, verificheremo e convalideremo il nome utente e la password. Quindi, ecco il completo Authenticate
classe:
class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method): if resource == 'user' and method == 'GET': user = app.data.driver.db['user'] user = user.find_one({'username': username,'password':password}) if user: return True else: return False elif resource == 'user' and method == 'POST': return username == 'admin' and password == 'admin' else: return True
Dobbiamo passare il Authenticate
nome della classe durante l'avvio dell'API. Quindi modifica il codice di avvio dell'API come mostrato:
if __name__ == '__main__': app = Eve(auth=Authenticate) app.run()
Salva tutte le modifiche ed esegui api.py
. Prova a inviare una richiesta di autenticazione di base con nome utente e password da Postman a http://127.0.0.1/user/username (sostituisci nome utente con qualsiasi altro nome utente esistente). In caso di autenticazione riuscita, dovresti ottenere i dettagli dell'utente in risposta come mostrato:
Aggiungi, elimina e aggiorna elementi
Aggiungi API elemento
Per creare un'API Aggiungi elemento, tutto ciò che dobbiamo fare è creare un nuovo schema per l'elemento in settings.py
.
'item': { 'schema': { 'name':{ 'type': 'string' }, 'username': { 'type': 'string' } } }
L'API Aggiungi elemento aiuterebbe ogni utente connesso ad aggiungere un elemento. Salveremo l'elemento insieme al nome utente dell'utente che ha inserito l'elemento. Salva le modifiche e prova a eseguire una richiesta POST a http://127.0.0.1/item come mostrato:
Elimina API elemento
Per eliminare un elemento creato da un utente, tutto ciò che dobbiamo fare è chiamare l'endpoint dell'elemento /item_id
. Ma semplicemente chiamare una richiesta DELETE non cancellerà l'elemento. Per eliminare un elemento, dobbiamo anche fornire un _etag
relativi a un determinato oggetto. Una volta item id
e _etag
corrispondenza, l'elemento viene eliminato dal database. Ecco come viene chiamato il metodo DELETE nell'endpoint dell'elemento.
Aggiorna API elemento
L'API di aggiornamento è simile all'API di eliminazione. Tutto quello che dobbiamo fare è inviare una richiesta PATCH con l'item id
e _etag
e i campi del modulo che devono essere aggiornati. Ecco come vengono aggiornati i dettagli dell'articolo: