5.4.1. Flask

5.4.1.1. Was ist Flask?

Flask ist ein vom österreichischen Programmierer Armin Ronacher in Python geschriebenes Webframework. Der Fokus von Flask liegt auf Erweiterbarkeit und guter Dokumentation. Die einzigen Abhängigkeiten sind Jinja2, eine Template-Engine, und Werkzeug, eine Bibliothek zum Erstellen von WSGI-Anwendungen.

Wir haben Flusk bei der Webentwicklung gebraucht, um einfache REST-Schnittstellen gewähren zu können. Damit kommuniziert unserer Dart-Anwendung, hinter jeder URL ist eine Methode hinterlegt.

5.4.1.2. Was ist REST-API?

Representational State Transfer ist ein Paradigma für die Softwarearchitektur von verteilten Systemen, insbesondere für Webservices. REST ist eine Abstraktion der Struktur und des Verhaltens des World Wide Web. REST hat das Ziel, einen Architekturstil zu schaffen, der den Anforderungen des modernen Web besser genügt.

5.4.1.3. Wie sieht die REST-API Schnittstelle im Backend aus?

@app.route('/uploadBarcode', methods=["POST"])
def uploadBarcode():

@app.route('/getBarcode', methods=["POST"])
def getBarcode():
<...>

Wir benutzen hier 2 Schnittstellen, die hierunter zu erreichen sind: Serveradresse/uploadBarcode und Serveradresse/getBarcode. Beide Serveradressen erwarten eine POST-Methode. Diese ist weitaus sicherer als die GET-Methode, da die Variablen nicht in den Serverlogs sowie dem Suchverlauf aufzufinden sind.

5.4.1.4. Methode 1: uploadBarcode()

@app.route('/uploadBarcode', methods=["POST"])
def uploadBarcode():
    content_type = request.headers.get('Content-Type')
    if ('application/json' in content_type):
        json = request.json
        barcode = json["barcode"]
        name = json["name"]
        description = json["description"]

        #will be boolean
        opensearch_answer=Opensearch_Client().upload_barcode(barcode, name, description)
        if(opensearch_answer):
            return Response(status=200)
        else:
            return Response(status=503)
    else:
        return Response(status=400)

Der gegebene Code definiert eine POST-Route ‚/uploadBarcode‘ in einer Webanwendung. Bei einer POST-Anfrage mit dem Inhaltstyp ‚application/json‘ werden die Barcode-, Name- und Beschreibungsdaten aus dem JSON-Inhalt extrahiert. Diese Daten werden an einen OpenSearch-Client übergeben, um den Barcode hochzuladen. Je nach Rückgabewert des Clients wird entweder ein HTTP-Statuscode 200 (OK) oder 503 (Service Unavailable) zurückgegeben. Bei einem anderen Inhaltstyp wird ein HTTP-Statuscode 400 (Bad Request) zurückgegeben.

5.4.1.5. Methode 2: getBarcode()

@app.route('/getBarcode', methods=["POST"])
def getBarcode():
    #json-Values
    name:str = ""
    result:bool = False
    description:str = ""

    content_type = request.headers.get('Content-Type')
    if ('application/json' in content_type):
        json = request.json
        barcode = json["barcode"]
        opensearch_answer=Opensearch_Client().search_barcode(barcode)
        result = opensearch_answer[0]
        name = opensearch_answer[1]
        description = opensearch_answer[2]
    else:
        return {
            "result": result,
            "name": name,
            "description":description
        }

Der gegebene Code definiert eine POST-Route ‚/getBarcode‘ in einer Webanwendung. Bei einer POST-Anfrage mit dem Inhaltstyp ‚application/json‘ wird der Barcode-Wert aus dem JSON-Inhalt extrahiert und an einen OpenSearch-Client gesendet. Die Rückgabewerte des Clients werden in Variablen gespeichert. Wenn der Inhaltstyp nicht ‚application/json‘ ist, wird eine JSON-Antwort mit den aktuellen Variablenwerten zurückgegeben. Dieser Code ermöglicht es, Barcode-Informationen über den API-Endpunkt abzurufen.