Python is een van de gemakkelijkst leesbare en gemakkelijk te programmeren programmeertalen aller tijden. In de loop der jaren is de populariteit van Python alleen maar toegenomen en wordt het veel gebruikt in webapplicatieontwikkeling, scripting, het maken van spellen, wetenschappelijk computergebruik, enz..
Flask is een Python-webapplicatieframework 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. Van de officiële documenten:
Powered by Flask, MongoDB, Redis en goede bedoelingen Eve laat toe om eenvoudig aanpasbare, volledig uitgeruste RESTful Web Service moeiteloos te bouwen en te implementeren.
In deze zelfstudie zullen we zien hoe REST-API's kunnen worden gebouwd met behulp van het EVE-framework. Vervolgens zullen we met AngularJS de front-end voor een eenvoudige app ontwerpen en deze functioneel maken door de REST-API's te gebruiken die zijn gebouwd met behulp van EVE. In deze zelfstudie implementeren we de volgende functionaliteit:
We zullen pip gebruiken om EVE te installeren.
pip installeer de vooravond
We zullen gebruiken MongoDB
als database. Bekijk de officiële documentatie voor installatie volgens uw systeem.
Maak een projectmap met de naam PythonAPI
. Navigeren naar PythonAPI
en maak een bestand met de naam api.py
. Binnen api.py
importeren VOORAVOND
en maak een EVE-object.
from eve import Eve app = Eve ()
Voer vervolgens uit app
wanneer het programma wordt uitgevoerd als een hoofdprogramma.
from eve import Eve app = Eve () if __name__ == '__main__': app.run ()
Voer je uit MongoDB
met behulp van de volgende opdracht:
mongod --dbpath =/ Data / db /
Zoals u kunt zien, moeten we een pad opgeven voor de db-bestanden. Gewoon creëren data / db
in uw bestandssysteem en voer de bovenstaande opdracht uit.
Samen met een instantie van MongoDB
hardlopen vereist EVE een configuratiebestand met informatie over de API-bronnen. Dus in de PythonAPI
map maak een ander bestand aan met de naam settings.py
en voeg de volgende code toe:
DOMAIN = 'user':
De bovenstaande code informeert EVE dat een bron voor gebruiker
is beschikbaar.
Sla alle bestanden op en voer het uit api.py
:
python api.py
De API zou online moeten zijn zoals getoond:
We zullen Postman REST Client gebruiken om verzoeken naar de API's te verzenden. Het is gratis en kan met een eenvoudige klik worden geïnstalleerd. Als u klaar bent met de installatie, 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 getoond:
Omdat we geen specifieke API-resource hebben genoemd, worden alle beschikbare bronnen weergegeven. Probeer nu het gebruiker
bron en je zou het antwoord moeten hebben dat specifiek is voor de gebruiker
.
We zullen beginnen met het bouwen van een API om een gebruiker aan te maken of te registreren voor onze applicatie. De gebruiker zou bepaalde velden willen hebben Voornaam
, Achternaam
, Gebruikersnaam
, Wachtwoord
en Telefoonnummer
.
Dus eerst moeten we een schema voor een gebruiker definiëren. Schema definieert de velden en gegevenstypen van de sleutelvelden. Doe open settings.py
en wijzig de DOMEIN
door een schema te definiëren zoals getoond:
DOMAIN = 'user': 'schema': 'firstname': 'type': 'string', 'lastname': 'type': 'string', 'gebruikersnaam': '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 het uit api.py
. Probeer van Postman Client een POST-aanvraag uit te voeren, samen met de vereiste parameters naar http://127.0.0.1/user, zoals afgebeeld:
Op POST-verzoek aan de gebruiker gooide het een 405 Methode niet toegestaan
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 resourcewerkwijzen zoals getoond:
RESOURCE_METHODS = ['GET', 'POST']
Sla de wijzigingen op en voer het uit api.py
. Probeer het nu opnieuw POST
naar gebruiker en je zou het onderstaande antwoord moeten hebben:
Zoals je 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 behulp van het actieve exemplaar van MongoDB
. Laten we inloggen op de MongoDB
shell en bekijk de nieuw gecreëerde record. Voer met MongoDB instance running de mongo-shell uit:
mongo
Eenmaal binnen de mongo
shell, lijst alle beschikbare databases.
toon databases;
Er moet een zijn vooravond
database. Schakel over naar de vooravond
databank.
gebruik de avond;
Voer de laten zien
commando om de tabellen in de lijst weer te geven vooravond
databank.
toon tafels;
De vermelde tabellen moeten een tabel hebben met de naam gebruiker
. Maak een lijst van de records van de gebruiker
tabel met behulp van de volgende opdracht:
db.user.find ()
Hier zijn de geselecteerde records van de gebruikerstabellen:
Vervolgens maken we een API om een bestaande gebruiker te valideren. Normaal gesproken, als we dat doen krijgen
verzoek aan het eindpunt van de gebruiker (http://127.0.0.1:5000/user), zal het details van alle geregistreerde gebruikers uit de database bevatten. 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 teruggeven bij succesvolle authenticatie.
Om gegevens op basis van de voornaam te krijgen, moeten we een extra opzoekveld toevoegen in de DOMEIN
in settings.py
.
'additional_lookup': 'url': 'regex ("[\ w] +")', 'field': 'username',
Zoals te zien is in de bovenstaande code, hebben we een zoekveld toegevoegd voor gebruikersnaam
. Nu wanneer een GET-verzoek wordt verzonden naar de http://127.0.0.1:5000/user/
het zal de details van de gebruiker retourneren met het betreffende gebruikersnaam
. Wanneer u een verzoek aan een bepaalde gebruiker doet, sturen we ook de gebruikersnaam
en wachtwoord
voor authenticatie.
We gaan basisverificatie uitvoeren om een bepaalde gebruiker te verifiëren op basis van gebruikersnaam en wachtwoord. Eerst moeten we het importeren Basisverificatie
klas van EVE. Maak een klasse genaamd waarmerken
om de authenticatie te implementeren zoals getoond:
van eve.auth importeren BasicAuth class Authenticate (BasicAuth): def check_auth (zelf, gebruikersnaam, wachtwoord, allowed_roles, resource, methode):
Nu, wanneer de bron is gebruiker
en de verzoekmethode is KRIJGEN
, we authenticeren de gebruiker. Na succesvolle verificatie worden de gebruikersgegevens van de gebruiker met voornaam in het API-eindpunt geretourneerd. We zullen ook het maken van gebruikers beperken door een gebruikersnaam en wachtwoord op te geven. Als de methode dus POST is en API-eindpunt gebruiker is, controleren en valideren we de gebruikersnaam en het wachtwoord. Dus, hier is het complete waarmerken
klasse:
class Authenticate (BasicAuth): def check_auth (zelf, gebruikersnaam, wachtwoord, allowed_roles, resource, methode): if resource == 'user' en methode == 'GET': user = app.data.driver.db ['user' ] user = user.find_one ('gebruikersnaam': gebruikersnaam, 'wachtwoord': wachtwoord) als gebruiker: retourneer True else: return False elif resource == 'gebruiker' en methode == 'POST': retourneer gebruikersnaam == ' admin 'en wachtwoord ==' admin 'else: return True
We moeten de waarmerken
klassenaam tijdens het starten van de API. Dus wijzig de API-initiatiecode zoals getoond:
if __name__ == '__main__': app = Eve (auth = Authenticate) app.run ()
Sla alle wijzigingen op en voer de api.py
. Probeer een basisverzoek met een gebruikersnaam en wachtwoord van Postman naar http://127.0.0.1/user/gebruikersnaam te verzenden (vervang gebruikersnaam door een andere bestaande gebruikersnaam). Bij succesvolle verificatie moet u de gebruikersgegevens als volgt beantwoorden:
Om een Add-item-API te maken, hoeven we alleen maar een nieuw schema voor item in te maken settings.py
.
'item': 'schema': 'naam': 'type': 'string', 'gebruikersnaam': 'type': 'string'
De Add Item API zou elke ingelogde gebruiker helpen om een item toe te voegen. We bewaren het item samen met de gebruikersnaam van de gebruiker die het item heeft ingevoerd. Sla de wijzigingen op en probeer een POST-aanvraag naar http://127.0.0.1/item te doen, zoals weergegeven:
Voor het verwijderen van een item dat door een gebruiker is gemaakt, hoeft u alleen maar het item-eindpunt te bellen /item ID
. Maar als u gewoon een DELETE-verzoek aanroept, wordt het item niet verwijderd. Om een item te verwijderen, moeten we ook een _etag
gerelateerd aan een bepaald item. Een keer item ID
en _etag
match, wordt het item uit de database verwijderd. Hier is hoe de DELETE-methode wordt aangeroepen in het eindpunt van het item.
De Update API is vergelijkbaar met de Delete API. Het enige wat we moeten doen is een PATCH-verzoek verzenden met de item ID
en _etag
en de formuliervelden die moeten worden bijgewerkt. Dit is hoe de itemdetails zijn bijgewerkt:
In deze zelfstudie hebben we gezien hoe u aan de slag kunt met het maken van API's met behulp van het Python EVE-framework. We hebben enkele standaard-API's voor CRUD-bewerkingen gemaakt die we in het volgende deel van de serie gebruiken bij het maken van een AngularJS-app.
Broncode van deze tutorial is beschikbaar op GitHub.
Laat het ons weten in de reacties hieronder!