Python is een van de meest gemakkelijk te lezen en gemakkelijk te schrijven programmeertalen aller tijden. In de loop der jaren is de populariteit van Python alleen maar toegenomen en wordt het veel gebruikt bij de ontwikkeling van webapplicaties, scripting, het maken van games, wetenschappelijke informatica, enz.
Flask is een Python-webtoepassingsframework dat aan populariteit wint vanwege het gebruiksgemak voor Python-beginners. In deze zelfstudie bekijken we EVE, een REST API-bouwraamwerk op basis van Flask, MongoDB en Redis. Uit de officiële documenten:
Aangedreven door Flask, MongoDB, Redis en goede bedoelingen maakt Eve het mogelijk om moeiteloos zeer aanpasbare, volledig functionele RESTful Web Service te bouwen en te implementeren.
Wat we gaan maken
In deze zelfstudie laten we zien hoe u REST-API's bouwt met behulp van het EVE-framework. Vervolgens zullen we met behulp van AngularJS de front-end ontwerpen voor een eenvoudige app en deze functioneel maken door de REST API's te gebruiken die zijn gebouwd met EVE. In deze tutorial zullen we de volgende functionaliteit implementeren:
- Gebruikers-API maken
- Gebruikers-API valideren
- Items-API toevoegen
- Items-API verwijderen
- Update Items-API
Aan de slag
Installatie
We gebruiken pip om EVE te installeren.
pip install eve
We gebruiken MongoDB
als databank. Bekijk de officiële documenten voor installatie volgens uw systeem.
De basis-API maken
Maak een projectmap met de naam PythonAPI
. Navigeer naar PythonAPI
en maak een bestand met de naam api.py
. Binnen api.py
importeer EVE
en maak een EVE-object.
from eve import Eve app = Eve()
Voer vervolgens app
. uit wanneer het programma als hoofdprogramma wordt uitgevoerd.
from eve import Eve app = Eve() if __name__ == '__main__': app.run()
Voer uw MongoDB
uit met het volgende commando:
mongod --dbpath= <PATH-TO> /data/db/
Zoals u kunt zien, moeten we een pad opgeven voor de db-bestanden. Maak eenvoudig data/db
in uw bestandssysteem en voer de bovenstaande opdracht uit.
Samen met een instantie van MongoDB
actief is, vereist EVE een configuratiebestand met informatie over de API-bronnen. Dus in de PythonAPI
map maak een ander bestand met de naam settings.py
en voeg de volgende code toe:
DOMAIN = {'user': {}}
De bovenstaande code informeert EVE dat een bron voor user
is beschikbaar.
Sla alle bestanden op en voer api.py
. uit :
python api.py
De API moet online zijn zoals weergegeven:
We gebruiken Postman REST Client om verzoeken naar de API's te verzenden. Het is gratis en kan met een simpele klik worden geïnstalleerd. Als u klaar bent met installeren, start u de app en voert u de API-URL in (http://127.0.0.1:5000/) en klikt u op verzenden. U zou het antwoord moeten hebben zoals weergegeven:
Aangezien we geen specifieke API-resource hebben aangeroepen, worden alle beschikbare resources weergegeven. Probeer nu de user
. te bellen bron en u zou het antwoord moeten hebben dat specifiek is voor de user
.
Gebruikers-API maken en valideren
Gebruikers-API maken
We beginnen met het bouwen van een API om een gebruiker voor onze applicatie aan te maken of te registreren. De gebruiker zou bepaalde velden hebben zoals First Name
, Last Name
, Username
, Password
en Phone Number
.
Dus eerst moeten we een schema voor een gebruiker definiëren. Schema definieert de velden en gegevenstypen van de sleutelvelden. Open settings.py
en wijzig het DOMAIN
door een schema te definiëren zoals weergegeven:
DOMAIN = { 'user': { 'schema': { 'firstname': { 'type': 'string' }, 'lastname': { 'type': 'string' }, 'username': { 'type': 'string', 'unique': True }, 'password': { 'type': 'string' }, 'phone': { 'type': 'string' } } } }
Zoals u in de bovenstaande code kunt zien, hebben we de belangrijkste velden gedefinieerd die nodig zijn om een gebruiker te maken en het gegevenstype dat in het schema is gedefinieerd. Sla de wijzigingen op en voer api.py
uit . Probeer vanuit Postman Client een POST-verzoek te doen samen met de vereiste parameters naar http://127.0.0.1/gebruiker zoals weergegeven:
Op POST-verzoek aan de gebruiker gooide het een 405 Method Not Allowed
fout. Standaard accepteert EVE alleen GET-verzoeken. Als we een andere methode willen gebruiken, moeten we deze expliciet definiëren. Open settings.py
en definieer de bronmethoden zoals weergegeven:
RESOURCE_METHODS = ['GET', 'POST']
Sla de wijzigingen op en voer api.py
uit . Probeer nu opnieuw om te POST
aan de gebruiker en u zou het onderstaande antwoord moeten hebben:
Zoals u kunt zien, was het bovenstaande POST-verzoek succesvol. We hebben de databaseconfiguraties niet gedefinieerd in onze settings.py
, dus EVE heeft het verzoek voltooid met de actieve instantie van MongoDB
. Laten we inloggen op de MongoDB
shell en bekijk de nieuw gemaakte record. Terwijl de MongoDB-instantie actief is, activeert u de mongo-shell:
mongo
Eenmaal binnen in de mongo
shell, vermeld alle beschikbare databases.
show databases;
Er moet een eve
. zijn databank. Schakel over naar de eve
database.
use eve;
Voer de show
uit commando om de tabellen binnen de eve
. weer te geven database.
show tables;
De vermelde tabellen moeten een tabel hebben met de naam user
. Maak een lijst van de records van de user
tabel met het volgende commando:
db.user.find()
Dit zijn de geselecteerde records uit de gebruikerstabellen:
Gebruikers-API valideren
Vervolgens maken we een API om een bestaande gebruiker te valideren. Normaal gesproken, als we een get
. doen verzoek aan het gebruikerseindpunt (http://127.0.0.1:5000/user), geeft het details van alle geregistreerde gebruikers uit de database. We moeten hier twee dingen implementeren. Eerst moeten we een gebruiker authenticeren met behulp van voornaam en wachtwoord, en ten tweede moeten we de gebruikersgegevens uit de database retourneren na succesvolle authenticatie.
Om details te krijgen op basis van de voornaam, moeten we een extra opzoekveld toevoegen in het DOMAIN
in settings.py
.
'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'username', }
Zoals te zien is in de bovenstaande code, hebben we een opzoekveld toegevoegd voor username
. Wanneer nu een GET-verzoek wordt verzonden naar de http://127.0.0.1:5000/user/
<username>
het zal de details van de gebruiker teruggeven met de specifieke username
. Wanneer we een verzoek aan een bepaalde gebruiker doen, sturen we ook de username
en password
voor authenticatie.
We zullen basisverificatie uitvoeren om een bepaalde gebruiker te verifiëren op basis van gebruikersnaam en wachtwoord. Eerst moeten we de Basic Auth
. importeren klas van EVE. Maak een klasse met de naam Authenticate
om de authenticatie te implementeren zoals getoond:
from eve.auth import BasicAuth class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method):
Nu, wanneer de bron user
is en aanvraagmethode is GET
, verifiëren we de gebruiker. Bij succesvolle authenticatie worden de gebruikersgegevens van de gebruiker met de voornaam in het API-eindpunt geretourneerd. We beperken ook het aanmaken van gebruikers door een gebruikersnaam en wachtwoord op te geven. Dus als de methode POST is en het API-eindpunt de gebruiker is, controleren en valideren we de gebruikersnaam en het wachtwoord. Dus hier is de volledige Authenticate
klas:
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
We moeten de Authenticate
. doorgeven klassenaam tijdens het starten van de API. Pas dus de API-initiatiecode aan zoals weergegeven:
if __name__ == '__main__': app = Eve(auth=Authenticate) app.run()
Sla alle wijzigingen op en voer de api.py
. uit . Probeer een eenvoudig verificatieverzoek met een gebruikersnaam en wachtwoord van Postman naar http://127.0.0.1/gebruiker/gebruikersnaam (vervang gebruikersnaam door een andere bestaande gebruikersnaam). Na succesvolle authenticatie, zou u de gebruikersgegevens als antwoord moeten krijgen, zoals weergegeven:
Items toevoegen, verwijderen en bijwerken
Item-API toevoegen
Om een API voor het toevoegen van een item te maken, hoeven we alleen maar een nieuw schema voor het item te maken in settings.py
.
'item': { 'schema': { 'name':{ 'type': 'string' }, 'username': { 'type': 'string' } } }
De Add Item API zou elke ingelogde gebruiker helpen om een item toe te voegen. We slaan het item op samen met de gebruikersnaam van de gebruiker die het item heeft ingevoerd. Sla de wijzigingen op en probeer een POST-verzoek te doen naar http://127.0.0.1/item zoals weergegeven:
Item-API verwijderen
Voor het verwijderen van een item dat door een gebruiker is gemaakt, hoeven we alleen het item-eindpunt /item_id
te bellen . Maar door simpelweg een DELETE-verzoek aan te roepen, wordt het item niet verwijderd. Om een item te verwijderen, moeten we ook een _etag
. opgeven gerelateerd aan een bepaald item. Eenmaal item id
en _etag
match, wordt het item uit de database verwijderd. Hier is hoe de DELETE-methode wordt aangeroepen in het item-eindpunt.
Item-API bijwerken
De Update API is vergelijkbaar met de Delete API. Het enige wat we hoeven te doen is een PATCH-verzoek sturen met de item id
en _etag
en de formuliervelden die moeten worden bijgewerkt. Hier is hoe de itemdetails worden bijgewerkt: