Backend Flashcards
Was ist der Security Decorator und was macht er?
Der “Security Decorator” ist eine Umsetzung des Decorator Patterns in der Softwareentwicklung mit Schwerpunkt auf Sicherheitsaspekten. In diesem Kontext enthält er die “secured”-Funktion, die ein Cookie mit einem Token aus dem Browser liest. Dieser Token wird genutzt, um bei der Firebase API nach Informationen über den Benutzer zu fragen. Die erhaltene lange ID identifiziert die Person, welche die Client-Session gestartet hat. Die “secured”-Funktion gibt ein Objekt zurück, das Informationen über den Benutzer enthält. Diese Implementierung ermöglicht die modulare und wiederverwendbare Ergänzung von Sicherheitsfunktionen, wie Authentifizierung und Autorisierung, ohne die Kernlogik der Anwendung zu verändern.
Was ist Flask?
Flask ist ein leichtgewichtiges Web-Framework für die Programmiersprache Python. Es wurde entwickelt, um einfach und flexibel zu sein und ermöglicht die Erstellung von Webanwendungen und APIs. Flask bietet die grundlegenden Funktionen, die für Webentwicklung erforderlich sind, ohne dabei zu viele Strukturen vorzugeben.
Einige Merkmale von Flask:
- Routing: Ermöglicht das Zuordnen von URLs zu Funktionen (sogenannte “Views”), um den Ablauf von Anfragen zu steuern.
- Templates: Flask unterstützt die Verwendung von Jinja2-Templates, um dynamische HTML-Seiten zu erstellen.
- Werkzeug und Jinja2: Flask baut auf Werkzeug (Toolbox für WSGI) und Jinja2 (Template-Engine) auf.
- Erweiterbarkeit: Durch zahlreiche Erweiterungen kann Flask mit zusätzlichen Funktionen wie Datenbankintegration, Authentifizierung und mehr ausgestattet werden.
- Entwicklerfreundlichkeit: Flask ist darauf ausgelegt, einfach zu verwenden und eine geringe Einstiegshürde für Entwickler zu bieten.
Es ist wichtig zu beachten, dass Flask im Vergleich zu anderen Web-Frameworks, wie z.B. Django, bewusst minimalistischer ist. Das macht es besonders gut geeignet für kleinere bis mittlere Projekte oder wenn Sie mehr Kontrolle über die Komponenten Ihrer Anwendung wünschen.
Was ist der Unterschied zwischen Framework und Library?
Ein wesentlicher Unterschied zwischen den beiden ist die Umkehrung der Kontrolle. Bei der Verwendung einer Library bleibt die Kontrolle beim Entwickler, der der Anwendung sagt, wann sie die Library-Funktionen aufrufen soll. Bei der Verwendung eines Frameworks ist die Kontrolle umgekehrt, d. h. das Framework sagt dem Entwickler, wo Code bereitgestellt werden muss, und ruft ihn nach Bedarf auf. Word: Der Unterschied zwischen den beiden liegt im Inversion Control = Wenn man eine Library benutzt ist man für den Applikationsverlauf/flow verantwortlich, wie z.B Wir suchen uns selbst aus wann und wo wir die Library benutzen. Bei dem Framework ist es so dass das Framework den Applikationsflow zuständig ist, also es bietet gewisse Umgebungen an in der wir unseren Code einfügen können und das Framework ruft dann den Code auf, wenn er diesen benötigt.
Zusatzfrage: was ist das Ziel von Frameworks/Librarys?
Frameworks und Bibliotheken haben dasselbe Ziel: Sie erweitern die Palette der Funktionen, die den Entwicklern zur Verfügung stehen, optimieren ihren Arbeitsaufwand und reduzieren den Rahmen für Fehler und ineffizienten Code. Frameworks und Bibliotheken sind von Dritten entwickelte Code-Blöcke, die bei der Lösung gängiger Probleme in einer bestimmten Programmiersprache helfen.
Was ist eine API?
Eine API (Application Programming Interface) ist eine Schnittstelle zum Austausch von Daten, in der Regel zwischen einem Client und einem Server. Es handelt sich um eine Schnittstelle für eine bestimmte Anwendung, die nur Befehle entgegennimmt und keine visuelle Darstellungsschicht (Presentation Layer) hat. Hier werden ausschließlich Anfragen gesendet. Als Antwort erhalten wir Daten, normalerweise im JSON-Format.
Woraus besteht ein Request?
Ein HTTP-Request, der zur Kommunikation zwischen einem Client und einem Server verwendet wird, besteht aus mehreren Teilen. Hier sind die grundlegenden Bestandteile eines HTTP-Requests:
-
Request-Line:
- Die erste Zeile des Requests enthält Informationen über die Anfrage, einschließlich der verwendeten HTTP-Methode (GET, POST, etc.), der URL und der verwendeten Protokollversion.
-
Header:
- Der Header enthält zusätzliche Informationen über den Request, wie z.B. die Art des Clients, akzeptierte Datenformate, Authentifizierungsdaten und mehr.
Accept: application/json
` -
Leerzeile:
- Eine Leerzeile trennt den Header vom optionalen Body des Requests.
-
Body (optional):
- Der Body enthält zusätzliche Daten, die mit der Anfrage gesendet werden können. Dies ist häufig bei POST- oder PUT-Anfragen der Fall, wenn Daten übermittelt werden.
Zusammen ergibt dies einen vollständigen HTTP-Request. Der Server verarbeitet diese Anfrage und sendet eine entsprechende HTTP-Response zurück an den Client.
Was ist die Applikationslogik?
Die Applikationslogik, auch als Business-Logik oder Geschäftslogik bezeichnet, ist der Teil einer Softwareanwendung, der für die Verarbeitung und Ausführung der eigentlichen Geschäftsregeln und -anforderungen verantwortlich ist. Diese Logik implementiert die spezifischen Funktionen und Operationen, die für die Kernfunktionalität der Anwendung notwendig sind.
Die Applikationslogik kann verschiedene Aufgaben umfassen, wie:
- Datenverarbeitung: Verarbeitung von Benutzereingaben, Berechnungen, Datenmanipulation und -validierung.
- Geschäftsregeln: Umsetzung der logischen Regeln und Prozesse, die für das Kerngeschäft der Anwendung relevant sind. Dies könnte beispielsweise Preisberechnungen, Bestandsverwaltung oder Benutzerauthentifizierung umfassen.
- Workflows: Definition und Ausführung von Prozessabläufen, die die Interaktionen innerhalb der Anwendung steuern.
- Datenzugriff: Interaktion mit der Datenbank oder anderen Datenquellen, um Daten abzurufen, zu speichern oder zu aktualisieren.
Die Trennung der Applikationslogik von anderen Schichten einer Anwendung, wie der Benutzeroberfläche und der Datenbank, wird oft durch das Konzept der Schichtenarchitektur (Layered Architecture) unterstützt. Diese Trennung verbessert die Wartbarkeit, Erweiterbarkeit und Testbarkeit von Softwareanwendungen.
Wie würden Sie vorgehen, wenn Sie eine Stauplanungsapp entwickeln sollten?
SystematischerSoftware-Entwicklungsprozess
feste Schritte: Anforderungsanalyse → Systemspezifikation, Use Case und UML Klassendiagramm erstellen→ Implementierung
Wie ist der API Flow?
Nutzer (Client) sendet eine Anfrage (Request) an die Schnittstelle der Anwendung (API). Die API nimmt die Anfrage entgegen und überprüft sie gegebenenfalls. Der Backend-Code verarbeitet die Anfrage und gibt das Ergebnis an die API zurück. Die Antwort (Response) wird dann weiter zum Nutzer geleitet.
Beispiel: Ein Request lautet ‘Gib mir meine Profilseite’. Die Anfrage wird an den API-Endpunkt gesendet, der prüft, ob der Nutzer eingeloggt ist. Wenn ja, wird die Profilseite aus der Datenbank geladen und als Response an den Nutzer gesendet.
Es gibt verschiedene Arten von Anfragen (HTTP Requests), darunter GET (Daten abrufen), POST (Daten erstellen, z. B. bei einem Facebook-Post), PUT (Daten aktualisieren) und DELETE (Daten löschen)
Was ist ein Endpunkt?
Ein Endpunkt (Endpoint) ist eine spezifische URL (Uniform Resource Locator) oder URI (Uniform Resource Identifier) in einer Webanwendung. Der Endpunkt definiert, wohin eine Anfrage gesendet werden soll und welcher Prozess oder Dienst diese Anfrage verarbeiten wird. In der Regel repräsentiert ein Endpunkt eine Ressource oder einen spezifischen Dienst in einem Web-API (Application Programming Interface) und kann unterschiedliche HTTP-Methoden wie GET, POST, PUT oder DELETE unterstützen.
Was ist eine abstrakte Klasse?
Von einer abstrakten Klasse werden niemals Exemplare (Instanzen) erzeugt; sie ist bewusst unvollständig und bildet somit die Basis für weitere Unterklassen, die Exemplare haben können. Abstrakte Klassen repräsentieren häufig einen Allgemeinbegriff, einen Oberbegriff für eine Menge konkrete Begriffe (z.B. Fahrzeug: Pkw, Flugzeug etc.). Eine abstrakte Klasse ist immer eine Oberklasse.
Was ist CORS?
Wenn ein Client, der von einem Server (Domain) ausgeliefert wurde, auf Daten von einem anderen Server zugreifen möchte und Anfragen dorthin macht (also an den anderen Server), dann nennt man dies Cross-Origin-Requests. Das CORS (Cross Origin Request Sharing). Der 2. Webserver kann sagen, dass dies gestattet werden soll durch eine Konfiguration eines Proxies in “package.json” auf “localhost:5000”. Somit werden alle Requests, die der Der-Server nicht beantworten kann, dahin weitergeleitet und man kommt so immer noch von der selben Domain.
Wie ist der ganze Web Client aufgebaut?
React App - über Business Objects -> Web Service API Abstraction (bilden beide den React Client) und über REST Interfaces entsteht der Zugriff auf das Backend -> Flask Server Web Service Endpunkt (Python Backend). Webservice = Flask Server (Backend)
Wie greife ich auf das Webservice (Backend) zu ? = Durch das Rest Interface
Die Api die wir im Frontend gecodet haben ist die Web Service -API Abstraction
Api Klasse als Singleton realisiert
Definiert die Web Service Urls
Abstrahiert Zugriff auf einzelne Backend Services
Gibt entsprechende Bos zurück statt Json
App muss sich nicht um die änderung der JSON Struktur kümmern
Was ist ein Singelton = Das heißt das ich genau eine Api gibt die global zur Verfügung gestellt wird
Was sind Namespaces?
Namespaces erlauben uns die Strukturierung von APIs. Alle
relevanten Operationen können unter einem Namespace z.B. dem Präfix /bank zusammen gefasst werden. Eine alternative bzw. ergänzende Nutzung von Namespace könnte etwa sein, unterschiedliche API-Versionen voneinander zu trennen, um etwa
Abwärtskompatibilität (vgl. Lehrveranstaltungen zu Software Engineering) zu gewährleisten. Dies ließe sich z.B. umsetzen durch /bank/v1, /bank/v2 usw.
Was ist ein Promise?
Promises sind Objekte, die das Ergebnis einer asynchronen Aktion abfangen und es zurück geben, wenn die versprochenen Daten erfolgreich geladen wurden oder ein Fehler aufgetreten ist. Sie sind sozusagen Platzhalter für ein Versprechen, dass vielleicht erfüllt wird, vielleicht aber auch nicht.
Was ist das Backend/ die Applikationsschicht?
Das ist indem sinne die Mitte des Systems, diese beschäftigt sich nicht mit der Präsentationsschicht und auch nicht mit der Speicherung von Informationen, sondern stellt all das dar was die Anwendung, indem sinne tatsächlich kann (Regeln, Algorithmen, Strukturen und die BOs). In dieser Mitte müssen Dienste bereitgestellt werden damit diese 2 Clients diese Aktionen durchführen können.
Wie stelle ich den diese Dienste Bereit (Service Layer)
Wir können hier halt über den Rest Ansatz, echte Webservices bereitstellen, die dann von diesen Clients konsumiert werden können.
Business Logic Layer
Die BLL greift dann auf diese Datenhaltungsschicht zu.
Ist ein Objektorientiertes Gebilde basierend auf Python im Service und BL Layer.
Database Layer
Hier befindet sich nicht nur die DB, sondern auch die Software zur Anbindung der Datenbank
Wir brauchen einen Mechanismus, der eine Abbildung zwischen der Objektorientierten Welt und der Tuple Welt einer Relationalen DB schafft = wird in den Mappern gemacht
Oauth Protokollfluss. Wie läuft denn das Ganze ab ?
- Client fordert eine Autorisierung vom Resource Owner
- Client erhält eine Autorisierungsgenehmigung vom Ressource Owner
- Client fordert ein Access Token vom Authorization Server (API). Hierfür
nutzt er die Autorisierungsgenehmigung vom Resource Owner (&
Authentifizierung der eigenen Identität) - Authorization Server (API) authentisiert den Client (permisson to ask) &
prüft die Autorisierungsgenehmigung vom Resource Owner. Ist dies
erfolgreich, stellt er einen Access Token aus - Client fragt die geschützten Daten beim Resource Server (API) an. Zur
Authentisierung benutzt er das Access Token
6.Der Resource Server prüft das Access Token & stellt, wenn gültig, die
gewünschten Daten zur Verfügung
Was ist Flask-restx?
Flask-Restx ist eine Erweiterung zu Flask, auf der unser Service Layer basiert. Restx ermöglicht die Erstellung von serverseitigen Ressourcen, die über die Fetch API oder XML HTTP Requests abgerufen werden können. In der Main
-Klasse wird dann eine Instanz von Flask erstellt. Restx bietet eine Klasse namens API
, an die in der Main
-Klasse Routen angehängt werden. Ähnlich wie bei Flask kann man in dieser API-Klasse eine URI angeben, unter der ein bestimmtes Programm aufgerufen werden kann. In der Main
-Klasse existiert auch eine Resource
-Klasse, die eine Basisklasse ist und grundlegende Funktionen enthält.
Was ist ein JSON?
JSON (JavaScript Object Notation) ist ein Format zur Speicherung von Daten. Ursprünge liegen im JavaScript-Umfeld, jedoch heute können nahezu alle gängigen Programmiersprachen JSON verarbeiten (tlw. mit Hilfe von zusätzlichen Bibliotheken). Wird vor allem verwendet, um Daten zwischen verschiedenen Komponenten auszutauschen, z.B.: APIs, Datenexporte, Objekt-Serialisierung und -Deserialisierung („SerDe“). JSON ist schema-los (engl. schema-less) und daher vor allem im NoSQL-Umfeld sehr beliebt. Zudem ist JSON gut (für Menschen) lesbar.
Warum bekommen wir im Frontend den JSONs vom Backend zurück?
Mit marshal_list_with(modul) also dieser Decorator stellt halt aus dem angefragten modul Lesbare Zeichen für das Frontend und das Frontend muss dies dann umwandeln.
Das Frontend macht dann aus den JSON -> Object
Oben in der Main wird aufgezeigt, wie die Attribute also die Daten für das Frontend vorbereitet werden