Bygg REST APIer ved hjelp av EVE

Python er en av de mest lettleste og enkle å skrive programmeringsspråk til enhver tid. Gjennom årene har populariteten til Python bare økt, og den er mye brukt i utvikling av webapplikasjoner, skripting, skape spill, vitenskapelig databehandling, osv..

Flask er et Python webapplikasjonsramme som blir stadig mer populært på grunn av sin brukervennlighet for Python-nybegynnere. I denne opplæringen tar vi en titt på EVE, et REST API-byggverk basert på Flask, MongoDB og Redis. Fra de offisielle dokumentene:

Drevet av Flask, MongoDB, Redis og gode hensikter Eve gjør det mulig å enkelt bygge og distribuere svært tilpasses, fullt utstyrt RESTful Web Service.

Hva skal vi skape

I denne veiledningen vil vi se hvordan du bygger REST-APIer ved hjelp av EVE-rammeverket. Ved å bruke AngularJS skal vi designe frontenden for en enkel app og gjøre den funksjonell ved å bruke REST APIene som er bygget med EVE. I denne veiledningen vil vi implementere følgende funksjonalitet:

  • Opprett bruker-API
  • Validér bruker-API
  • Legg til elementer API
  • Slett elementer API
  • Oppdater elementer API

Starter

Installasjon

Vi bruker pip for å installere EVE.

pip installeringsaften

Vi skal bruke MongoDB som database. Ta en titt på de offisielle dokumentene for installasjon som per ditt system.

Opprette grunnleggende API

Opprett en prosjektmappe som heter PythonAPI. Navigere til PythonAPI og lag en fil som heter api.py. Innsiden api.py importere EVE og opprett et EVE-objekt.

fra eve import Eve app = Eve ()

Deretter løp app når programmet utføres som et hovedprogram.

fra eve import Eve app = Eve () hvis __name__ == '__main__': app.run ()

Kjør din MongoDB bruker følgende kommando:

mongod - dbpath =  / Data / db /

Som du kan se, må vi spesifisere en sti for db-filene. Opprett bare data / db i filsystemet ditt og kjør kommandoen ovenfor.

Sammen med en forekomst av MongoDB kjører, krever EVE en konfigurasjonsfil med informasjon om API-ressursene. Så i PythonAPI mappe opprette en annen fil som heter settings.py og legg til følgende kode:

DOMAIN = 'bruker': 

Ovennevnte kode informerer EVE om at det er en ressurs for bruker er tilgjengelig.

Lagre alle filene og kjøre api.py:

python api.py

APIen skal være online som vist:

Vi bruker Postman REST Client til å sende forespørsler til APIene. Det er gratis og kan installeres med et enkelt klikk. Når du er ferdig med installasjonen, start appen og skriv inn API-nettadressen (http://127.0.0.1:5000/) og klikk send. Du bør ha svaret som vist:

Siden vi ikke har ringt noen bestemt API ressurs, vil den vise alle tilgjengelige ressurser. Nå, prøv å ringe bruker ressurs og du bør ha svaret spesifikt for bruker.

Opprett og valider bruker-API

Opprett bruker-API

Vi starter med å bygge en API for å opprette eller registrere en bruker for vår søknad. Brukeren vil ha visse felt som Fornavn, Etternavn, Brukernavn , Passord og Telefonnummer.

Så først må vi definere et skjema for en bruker. Schema definerer feltene og datatyper av nøkkelfeltene. Åpne opp settings.py og endre DOMENE ved å definere et skjema som vist:

DOMAIN = 'bruker': 'skjema': 'fornavn': 'type': 'streng', 'etternavn': 'type': 'streng', 'brukernavn': 'type' 'streng', 'unik': True, 'passord': 'type': 'streng', 'telefon': 'type': 'streng'

Som du kan se i koden ovenfor, har vi definert nøkkelfeltene som trengs for å opprette en bruker og dens datatype definert i skjemaet. Lagre endringene og utfør api.py. Fra Postman-klienten prøver å gjøre en POST-forespørsel sammen med de nødvendige parametrene til http://127.0.0.1/user som vist:

På POST-forespørsel til bruker, kastet den a 405 Metode ikke tillatt feil. EVE aksepterer som standard kun GET-forespørsler. Hvis vi vil bruke en hvilken som helst annen metode, må vi definere det eksplisitt. Åpen settings.py og definer ressursmetodene som vist:

RESOURCE_METHODS = ['GET', 'POST']

Lagre endringene og utfør api.py. Prøv nå igjen POST til brukeren og du bør ha det nedenstående svaret:

Som du kan se, var POST-forespørselen ovenfor vellykket. Vi har ikke definert database konfigurasjonene i vår settings.py, så EVE fullførte forespørselen ved hjelp av løpende forekomst av MongoDB. La oss logge inn på MongoDB skall og se den nyopprettede posten. Med MongoDB-forekomst kjører, utløs Mongo-skallet:

mongo

En gang inne i mongo shell, liste alle tilgjengelige databaser.

vise databaser;

Det må være en eve database. Bytt til eve database.

bruk eve;

Utfør vise fram kommando for å liste tabellene inne i eve database.

vise tabeller;

De listede tabellene må ha et bord som heter bruker. Skriv opp postene fra bruker bord ved hjelp av følgende kommando:

db.user.find ()

Her er de valgte postene fra brukerbordene:

Validér bruker-API

Deretter oppretter vi en API for å validere en eksisterende bruker. Normalt, hvis vi gjør en forespørsel til brukerens sluttpunkt (http://127.0.0.1:5000/user), vil det gi ut detaljer om alle registrerte brukere fra databasen. Vi må implementere to ting her. Først må vi godkjenne en bruker ved å bruke fornavn og passord, og for det andre må vi returnere brukerdetaljer fra databasen på vellykket godkjenning.

For å få detaljer basert på fornavnet, må vi legge til et ekstra oppslagsfelt i DOMENE i settings.py.

'additional_lookup': 'url': 'regex ("[\ w] +")', 'felt': 'brukernavn',

Som vist i koden ovenfor har vi lagt til et oppslagsfelt for brukernavn. Nå når en GET-forespørsel sendes til http://127.0.0.1:5000/user/ det vil returnere detaljene til brukeren med det aktuelle brukernavn. Når vi sender en forespørsel til en bestemt bruker, sender vi også brukernavn og passord for godkjenning.

Vi gjør grunnleggende godkjenning for å verifisere en bestemt bruker basert på brukernavn og passord. Først må vi importere Grunnleggende Auth klasse fra EVE. Opprett en klasse som heter Verifisere å implementere godkjenningen som vist:

fra eve.auth importere BasicAuth klasse Authenticate (BasicAuth): def check_auth (selv, brukernavn, passord, allowed_roles, ressurs, metode): 

Nå, når ressursen er bruker og forespørselsmetoden er , Vi vil autentisere brukeren. Ved vellykket autentisering returneres brukerens detaljer om brukeren med fornavn i API-endepunktet. Vi begrenser også brukeropprettelsen ved å gi brukernavn og passord. Så, hvis metoden er POST og API endpoint er bruker, sjekker og validerer brukernavnet og passordet. Så, her er komplett Verifisere klasse:

class Authenticate (BasicAuth): def check_auth (selv, brukernavn, passord, allowed_roles, ressurs, metode): hvis ressurs == 'bruker' og metode == 'GET': user = app.data.driver.db ['bruker' ] bruker = user.find_one ('brukernavn': brukernavn, 'passord': passord) hvis bruker: return True annet: return False elif ressurs == 'bruker' og metode == 'POST': return brukernavn == ' admin 'og passord ==' admin 'else: return True

Vi må passere Verifisere klassenavn mens du starter API-en. Så modifiser API-initieringskoden som vist:

hvis __name__ == '__main__': app = Eve (auth = Autentiser) app.run ()

Lagre alle endringene og utfør api.py. Prøv å sende en grunnleggende auth-forespørsel med et brukernavn og passord fra Postman til http://127.0.0.1/user/username (erstatt brukernavn med et annet eksisterende brukernavn). Ved vellykket autentisering bør du få brukerens detaljer som svar:

Legg til, slett og oppdater elementer 

Legg til element-API

For å opprette en API for Legg til element, er alt vi trenger å gjøre, å lage et nytt skjema for elementet i settings.py.

'element': 'skjema': 'navn': 'type': 'streng', 'brukernavn': 'type': 'streng'

API-tillegget vil hjelpe hver innlogget bruker til å legge til et element. Vi lagrer elementet sammen med brukernavnet til brukeren som skrev inn varen. Lagre endringene og prøv å gjøre en POST-forespørsel til http://127.0.0.1/item som vist:

Slett element API

For å slette et element opprettet av en bruker, er alt vi trenger å gjøre, å ringe elementets endepunkt / ITEM_ID. Men bare å ringe en DELETE forespørsel, vil ikke slette elementet. For å slette et element, må vi også gi en _etag relatert til en bestemt gjenstand. En gang element id og _etag match, er elementet slettet fra databasen. Her er hvordan DELETE-metoden kalles i elementets sluttpunkt.

Oppdater element API

Oppdaterings-API-en ligner slettingsgrensesnittet. Alt vi trenger å gjøre er å sende en PATCH-forespørsel med element id og _etag og skjemafeltene som må oppdateres. Slik oppdateres varenes detaljer:

Konklusjon

I denne veiledningen så vi hvordan du kommer i gang med å lage APIer ved hjelp av Python EVE-rammen. Vi opprettet noen grunnleggende APIer for CRUD-operasjoner som vi skal bruke i neste del av serien mens du oppretter en AngularJS-app.

Kildekode fra denne opplæringen er tilgjengelig på GitHub.

Gi oss beskjed om dine tanker i kommentarene nedenfor!