MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Creazione di API REST utilizzando EVE

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: