HTTP Server / Rest / verteilte Pfade

Django, Flask, Bottle, WSGI, CGI…
Antworten
homerunjack
User
Beiträge: 24
Registriert: Donnerstag 21. Juli 2016, 12:12

Mittwoch 19. Juli 2017, 08:54

Hallo,

ich habe eine Frage. Ich würde gerne eine Webapplikation mit Python+Flask und Angular2 bauen. Die Verknüpfung soll über einen HttpServer laufen.

Ich habe jetzt folgendes Stück Code:

Code: Alles auswählen

from flask import Flask, request
from flask_restful import Resource, Api
from flask.ext.jsonpify import jsonify

app = Flask(__name__)
api = Api(app)


# Http Rest API
class Pfad1(Resource):
    def get(self):
        return jsonify({'test': 'Test'})

class Pfad1_Variable(Resource):
    def get(self, variable_id):

        result = {'test': 'Test mit Variable'}
        return jsonify(result)

# Registrierung der Pfade
api.add_resource(Pfad1, '/pfad1')  # Route_1
api.add_resource(Pfad1_Variable, '/pfad1/<variable_id>')  # Route_3

# Webserver starten
if __name__ == '__main__':
    app.run(port='5002')
Wie kann ich alles so aufbauen, dass ich die API-Funktionen und den Server mit den Registrierungen der Ressourcen trennen kann.

Sozusagen:

main.py
--> Package 1 (beinhaltet Http Rest API Klassen (Pfad1, Pfad1_Variable))
--> Package 2 (beinhaltet weitere API Klassen)
--> Package HttpServer (Bekommt Klassen der anderen Packages, z.B. durch eine get_hooks() Funktion (Rest-Pfad und Klasse) und registriert diese dann???

Gibt es da eine übliche Vorgehensweise wie man eine solche Web-API aufbaut, um auch die eigenen Funktionen über mehrere Dateien/Packages zu verteilen?

Ich hoffe ihr könnt mir ein paar Tipps geben. Danke.
Zuletzt geändert von Anonymous am Mittwoch 19. Juli 2017, 09:44, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 2476
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 19. Juli 2017, 19:11

Hallo,

so ganz durchblicke ich die Frage nicht, also was dein Ziel ist.

Grundsätzlich kannst du das alles, auf beliebig viele Module verteile, die du dann an geeigneter Stelle importierst (z.B. in der Python-Datei, die den HttpServer enthält).

Ein konkret sinnvoll Aufteilung hängt dann davon ab, wie dein Programm bzw. deine Klassen konkret aussehen.

Gruß, noisefloor
homerunjack
User
Beiträge: 24
Registriert: Donnerstag 21. Juli 2016, 12:12

Freitag 21. Juli 2017, 14:42

Hallo,

ja, ich hatte einen mega Denkfehler. Die selbsterstellten Python Packages kann man ja überall verwenden :-)

Jedoch ist es schwierig ein erzeugtes Objekt in einer Baumstruktur von Zweig 1 auf Zweig 2 zu bekommen. Gibt es da einen Workaround?

Beispiel:

main.py
--> package 1 (Datenbankmodell)
---> sub1
----> sub1 erzeugt Objekt X = Datenbankverbindung
---> sub2

--> package 2
---> Webserver
----> Anzeige von Daten aus DB

--> package 3
---> Archivierung
----> Daten export aus Datenbank

Wie bekomme ich das schon erzeugte Objekt X in den Webserver, wenn man X an mehreren Stellen benötigt?
BlackJack

Freitag 21. Juli 2017, 16:29

@homerunjack: Man ruft im Webserver die Funktion aus dem Datenbankmodell auf die das Objekt erstellt‽ Was man nicht macht, nur so als Hinweis, ist die Datenbankverbindung auf Modulebene erstellen so dass das schon beim importieren des Moduls passiert. Das wären globale Variablen, die alle möglichen Probleme nach sich ziehen.
Antworten