Zephyrnet-logo

Volledige gids over Rest API met Python en Flask

Datum:

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

, Ik hoop dat het goed met je gaat. Ik wil je welkom heten in een prachtig artikel over het maken van een REST API met Flask. In een van onze vorige artikelen hebben we de basis van Flask geleerd en hoe deze in te stellen. We hebben een compleet end-end machine learning-project gemaakt met Flask. U kunt het vorige artikel openen via: hier. Maar mensen hebben veel twijfels over REST API, hoe kunnen we het maken voor een ander gebruik, of een taak uitvoeren zoals validatie, code converteren, enz. In deze tutorial zullen we praktisch leren Flask API te maken en onze REST API's te laten werken krachtiger. Voordat ik hieraan begin, ga ik ervan uit dat je bekend bent met de basis Python en Flask.

Inhoudsopgave

  1. Korte introductie tot REST API
  2. Maak uw eerste REST API met Flask
  3. Ander HTTP-verzoek met REST API
  4. Decorators gebruiken in REST API
  5. Hoe Flask API te beveiligen
  6. Tracking inschakelen op Flask API
  7. Eenheidstest schrijven voor REST API
  8. Eindnotities

Wat is REST API (Application Programming Interface)

REST API staat voor Restful API waarmee applicaties of interactie met RESTful webservices kunnen worden geïntegreerd. Het groeit nu als de meest gebruikelijke methode voor het verbinden van componenten in een microservice-architectuur. Met API's kunt u gegevens ophalen of verzenden naar een website en een actie uitvoeren om uw taak via een webservice uit te voeren. Elke website gebruikt verschillende soorten API's, zoals websites voor beurshandel die zijn geïntegreerd met Sensex of Nifty om een ​​actuele prijs en ups-down te krijgen. Ticketboekings-apps gebruiken een gewenste enkele portal-API om bijgewerkte gegevens op een vertrouwde interface te houden.

Maak uw eerste REST API

laten we naar de code-editor gaan. U kunt elke Python IDE gebruiken waar u zich prettig bij voelt. We maken de Hello world API, die zegt dat als je een get-verzoek erop klikt, je een JSON-antwoord krijgt omdat het universeel is dat API altijd een JSON-type antwoord geeft. Ik hoop dat je de Flask hebt geïnstalleerd; gebruik anders de PIP-opdracht en installeer deze met behulp van de onderstaande code. Maak een nieuw python-bestand en typ de onderstaande code.

pip install flask pip install flask-rustgevend
from flask import Flask from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) class Helloworld(Resource): def __init__(self): pass def get(self): return { "Hello": "World" } api.add_resource(Helloworld, '/') if __name__ == '__main__': app.run(debug=True)

Wat is Flask-rustig?

Flask restful definieert de resourceklasse, die methoden bevat voor elke HTTP-methode. De naam van de methode moet hetzelfde zijn als de bijbehorende HTTP-methode en in kleine letters worden geschreven. U kunt dit zien in de bovenstaande code. Deze methoden hebben echter geen routedecorateur, dus zijn ze gebaseerd op bronroutes. Welke klasse we ook definiëren, we definiëren de route ernaartoe met de methode add resource en op welke route we deze moeten aanroepen.

Uitleg ~ In de bovenstaande code laden we eerst de vereiste bovenliggende klassen en initialiseren vervolgens onze app en API. Daarna maken we een cursus en doen we een GET-verzoek waarin staat dat als iemand op deze klasse slaat, hij Hallo wereld krijgt als het antwoord in JSON-indeling. Om een ​​bepaalde URL in te schakelen, gebruiken we de methode resource toevoegen en routeren deze naar de standaard slash. Om dit bestand uit te voeren, kunt u de POSTMAN-tool, een API-onderhoudstool, gebruiken om API's te maken, testen en beheren. U kunt ook gebruik maken van de aanvraagmodule om deze API te proberen met behulp van de onderstaande code. Voer eerst het bovenstaande bestand uit, dat u de localhost-URL geeft, en voer in een andere opdrachtprompt het onderstaande codebestand uit.

importverzoeken url = "http://127.0.0.1:5000/" response = requests.get(url=url) print(response.text)
Uitgang | API met Python en Flask

HTTP-verzoek begrijpen via Flask RESTApi

Nu zijn we bekend met REST API. Onder deze kop zullen we verschillende HTTP-methoden verkennen met behulp van REST API, waar we één lijst zullen definiëren die alle gegevens opslaat die van de server zijn verkregen in de vorm van een woordenboek (JSON-object). Dit is belangrijk omdat we verschillende API's in projecten hebben om gegevens na de gegevens te krijgen, maar de gegevens ergens anders.

Hier zijn we een API aan het maken waar we 3 HTTP-methoden zullen maken genaamd GET, POST en DELETE, waar we een aangepaste URL zullen maken en zeggen dat wanneer u de POST-methode aanvraagt, het Naam als invoer zal nemen en bij het raken van de GET-methode, zal geef die naam terug en bij verwijderen, zullen we die naam verwijderen als deze aanwezig is en opnieuw toegang krijgen, zal ons NULL geven. Maak een bestand en schrijf de onderstaande code.

from flask import Flask from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) data = [] class People(Resource): def get(self): for x in data: if x['Data'] == naam: return x return {'Data': None} def post(self, name): temp = {'Data': name} data.append(temp) return temp def delete(self): for ind, x in enumerate(data): if x['Data'] == naam: temp = data.pop(ind) return {'Note': 'Deleted'} api.add_resource(People, '/Name/') if __name__ == '__main__': app.run(debug=True)

Open de POSTMAN API-tool en klik op elk HTTP-methodeverzoek. Ten eerste, wanneer we postverzoek gebruiken met Naam, geeft het ons een naam. Bij het verkrijgen van het verzoek krijgen we de naam terug. Het wordt verwijderd bij het verwijderen en wanneer u het opnieuw probeert terug te krijgen, krijgt u NULL. Bekijk de resultaten hieronder.

HTTP begrijpen
Reactie van HTTP | API met Python en Flask
API met Python en Flask

Decorators gebruiken in Flask REST API

We gebruiken decorateurs met API's om IP-adressen, cookies, enz. te bewaken. Dus onder deze kop zullen we leren hoe we de flask-API kunnen gebruiken met decorateurs. Een decorateur is een functie die een andere functie als argument neemt en een andere functie retourneert. Je kunt het ook begrijpen als een functie die een aantal extra functionaliteiten biedt aan de bestaande functie zonder de huidige functie te wijzigen of aan te passen.

Hier maken we een nieuw bestand aan en ik zal het je laten zien door twee decorateurs te maken. Dus in de eerste maken we de externe tijdfunctie die de uitvoeringstijd van de code retourneert. We importeren de wrap-decorator die is toegepast op de wrapper-functie uit de funtools module (standaardmodule voor pythonfuncties van hogere orde). Het werkt de ingepakte functie bij door al zijn argumenten te kopiëren.

uit kolf import Flask

van flask_restful import Resource, API

import datetime

van kolf importverzoek

van functools import wraps

app = Kolf(__naam__)

api = api(app)

def tijd(functie=Geen):

@wraps(functie)

def-wrapper(*args, **kwargs):

s = datumtijd.datumtijd.nu()

_ = functie(*args, **kwargs)

e = datumtijd.datumtijd.nu()

print ("Uitvoertijd: {} ".format(es))

opbrengst _

retourverpakking

klasse HelloWorld (bron):

@toezicht houden op

def krijgen (zelf):

retour {'hallo': 'wereld'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':

app.run(debug=Waar)


Decorateurs in Flask Tools

We maken de tweede decorateur voor het bewaken van cookies en IP-adressen, dus maak de onderstaande functie. In plaats van een tijddecorateur toe te voegen aan de hello world-functie, voegt u een monitordecorateur toe en voert u de code uit.

def monitor(function=None): @wraps(function) def wrapper(*args, **kwargs): _ = function(*args, **kwargs) print("Ip-adres: {} ".format(request.remote_user) )) print("Cookies: {} ".format(request.cookies)) print(request.user_agent) return _ return wrapper

Hoe Flask API veiliger te maken met basisverificatie

Wanneer we de API ontwerpen, moeten we ook voor beveiliging zorgen, omdat veel mensen er toegang toe hebben. Wat als u wilt dat alleen geautoriseerde mensen toegang krijgen tot de API omdat deze vertrouwelijke gegevens tussen sommige partijen kan bevatten, zodat we dat kunnen doen? Basisverificatie van Flask gebruiken. U moet deze kolfmodule installeren met behulp van het pip-commando.

pip installeer kolf-httpauth

We bouwen een API en definiëren het gebruikersdatawoordenboek, dat gebruikersnaam en wachtwoord bevat. Wanneer u in realtime use-cases werkt, accepteert u de gebruikersnaam en het wachtwoord via een configuratiebestand of uit een database. Eerst creëren we een primaire functie die overeenkomt met gebruikersnaam en wachtwoord en een GET-methode die zegt dat iedereen die deze API gebruikt, dus zonder login geen toegang heeft tot de gegevens.

from flask import Flask van flask_restful import Bron, Api van flask_httpauth import HTTPBasicAuth app = Flask(__name__) api = Api(app, prefix="/api/v1") auth = HTTPBasicAuth() USER_DATA = { "admin": "SuperSecretPwd" } #route om het wachtwoord te verifiëren @auth.verify_password def verifiëren(gebruikersnaam, wachtwoord): indien niet(gebruikersnaam en wachtwoord): return False return USER_DATA.get(gebruikersnaam) == wachtwoordklasse PrivateResource(Resource): @auth.login_required def get(self): return {"Hoe gaat het met de Josh": "High"} api.add_resource(PrivateResource, '/private') if __name__ == '__main__': app.run(debug=True)

Wanneer we het bovenstaande bestand uitvoeren met POSTMAN, proberen we de gegevens te verkrijgen zonder in te loggen om u ongeautoriseerde toegang te geven.

Basisverificatie

Ga nu naar autorisatie en klik op Basisautorisatie. Voer de gebruikersnaam en het wachtwoord in die u hebt gebruikt en druk vervolgens op GET-verzoek om het gewenste resultaat te krijgen.

API met Python en Flask

Dit is hoe u uw Flask API kunt beveiligen. Voor meer informatie over Flask Basic Authorization kunt u terecht op: dit blog.

Tracking inschakelen op Flask API

We hebben geleerd hoe we onze API kunnen beveiligen tegen ongeoorloofd inloggen, maar wat als we ook de locatie (lengte- en breedtegraad), IP-adres, servernaam willen weten, zoals details van een persoon die toegang heeft tot onze API, zodat we de basiskolf Tracking-applicatie met onze REST API. Installeer eerst het kolfvolgpakket met behulp van PIP Command.

pip install kolf-track-gebruik
from flask import Flask, g app = Flask(__name__) app.config['TRACK_USAGE_USE_FREEGEOIP'] = False app.config['TRACK_USAGE_INCLUDE_OR_EXCLUDE_VIEWS'] = 'include' from flask_track_usage import TrackUsage from flask_track_usage_Writer.storage. .output import OutputWriter t = TrackUsage(app, [ PrintWriter(), OutputWriter(transform=lambda s: "OUTPUT: " + str(s)) ]) @t.include @app.route('/') def index( ): g.track_var["optioneel"] = "Write_Something" return "Hallo" #Voer de toepassing uit als __name__ == "__main__": app.run(debug=True)

Uitleg ~ We zullen een tracking-applicatie maken door Track Usage, Input writer en output writer te importeren uit het geïnstalleerde pakket. We geven onze flask-app door aan het Track-pakket en gebruiken Output-schrijver, en we gebruiken de lambda-functie, een enkele regelfunctie, om de uitvoer in tekenreeksformaat te schrijven. Hierna maken we een basisrouting op slash en nemen we onze track-applicatie op als decorateur. G staat voor globaal, dat zegt dat gegevens globaal zijn binnen de context. Daarom hebben we een basis-API gemaakt die bij terugkeer van de browser, hallo maar aan de achterkant, alle informatie van de persoon krijgt. Op de opdrachtprompt kunt u de volgende uitvoer bekijken.

Tracking op Flask

U kunt JSON Formatter gebruiken om de uitvoer op een goed geformatteerde manier te bekijken.

Uitgang | API met Python en Flask

Hoe schrijf je een Unit Test-code voor je REST API

Nu hebt u een uitstekende REST-API voor uw zaak gemaakt. Toch zal uw manager u vragen om een ​​Unit-testcode voor REST API te schrijven, omdat het essentieel is om de veelvoorkomende bugs van uw API te identificeren en de productie te helpen beveiligen. Dus ik hoop dat je een eenvoudige API met je hebt gemaakt. Zo niet, maak dan een nieuw bestand met de naam run en ontwikkel de onderstaande eenvoudige API.

from flask import Flask from flask_restful import Resource, Api import json app = Flask(__name__) api = Api(app) class Helloworld(Resource): def __init__(self): pass def get(self): return json.dumps({" Bericht": "Fijn"}) api.add_resource(Helloworld, '/') if __name__ == '__main__': app.run(debug=True)

Maak nu nog een bestandsnaamtest waar we de code zullen schrijven voor het testen van onze API. Dus meestal moet u altijd de onderstaande drie basiseenheidstests uitvoeren.

  • Controleer of de responscode 200 . is
  • Controleer of de inhoud die is geschreven vanuit de API, is JSON-geformatteerd voor de toepassing
  • Controleer of alle sleutels waartoe we toegang hebben, aanwezig zijn in API-gegevensverwerking.
from run import app import unittest class FlaskTest(unittest.TestCase): #Check for response 200 def test_inde(self): tester = app.test_client(self) #tester object response = tester.get("/") statuscode = response. status_code self.assetEqual(statuscode, 200) #check of de content return applicatie JSON is def test_index_content(self): tester = app.test_client(self) response = tester.get("/") self.assetEqual(response.content_type, "application/json") #check de geretourneerde gegevens def test_index_data(self): tester = app.test_client(self) response = tester.get("/") self.assetTrue(b'Message' in response.data) if __name__ == '__main__': unittest.main()

Dus om in principe uit te werken als u webscraping hebt gedaan, betekent een 200-antwoordcode dat uw verzoek aan een bepaalde URL met succes is gedaan, wat een reactie oplevert. De tweede is een type gegevens dat aan de beheerder wordt verstrekt en dat op de juiste manier moet worden verwijderd wanneer iemand daarom vraagt, en de derde is alle aanwezige gegevens die zonder enige wijziging moeten worden verwerkt.

Eindnotities

Haast je! We hebben geleerd om Flask REST API helemaal opnieuw te maken en het onderhoud ervan eenvoudig en veilig te maken. REST API's zijn van een ander soort en worden voor andere doeleinden gebruikt. U kunt routering ook gebruiken met API's, zoals het maken van een functie in een apart bestand en het gebruiken als een decorateur met een hoofdtoepassingstoepassing. Dit was dus alles voor dit artikel. Ik hoop dat het gemakkelijk was om elke kop in te halen en als je vragen hebt, kun je ze in het commentaargedeelte hieronder plaatsen of contact met me opnemen.

Afbeeldingsbron - Medium

Maak contact met mij op Linkedin

Bekijk ook mijn andere artikelen hier of via gekke techneut

Bedankt voor het geven van uw tijd!

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

Bron: https://www.analyticsvidhya.com/blog/2022/01/rest-api-with-python-and-flask/

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?