Block 02 – Webapplikationen & Datenbanken¶
Lernziele¶
- Du kannst erklären was ein Reverse Proxy ist und wie er sich von einem normalen Proxy unterscheidet
- Du kannst den Unterschied zwischen SQL und NoSQL Datenbanken erläutern und weisst wann man welche einsetzt
- Du kannst erklären was eine REST API ist und wie sie funktioniert
1. Proxy und Reverse Proxy¶
Proxy (Forward Proxy)¶
Ein Proxy sitzt zwischen dem Client und dem Internet. Der Client schickt seine Anfragen zuerst an den Proxy, der sie dann im Namen des Clients weiterleitet.
flowchart LR
C[Client] --> P[Proxy]
P --> I[Internet]
Einsatzzwecke: - Anonymisierung (Server sieht die IP des Proxys, nicht des Clients) - Inhaltsfilterung (z.B. in Schulnetzwerken) - Caching (häufig geladene Seiten werden zwischengespeichert)
Reverse Proxy¶
Ein Reverse Proxy sitzt vor einem oder mehreren Servern. Der Client kommuniziert nur mit dem Reverse Proxy – er weiss nicht, welcher Server dahinter steckt.
flowchart LR
C[Client] --> R[Reverse Proxy]
R --> S1[Webserver 1]
R --> S2[Webserver 2]
R --> S3[API-Server]
Einsatzzwecke: - SSL-Terminierung: HTTPS wird beim Reverse Proxy entschlüsselt, intern läuft HTTP - Load Balancing: Anfragen werden auf mehrere Server verteilt - Sicherheit: Interne Server sind nicht direkt aus dem Internet erreichbar - Zentrale Zugangskontrolle: Ein Einstiegspunkt für mehrere Dienste
Im Modul 158: Apache kann als Reverse Proxy konfiguriert werden, z.B. um phpMyAdmin oder andere Dienste intern zu betreiben aber über eine öffentliche URL erreichbar zu machen.
Reverse Proxy vs. Virtual Host¶
Das ist ein häufiger Verwechslungspunkt, weil beides in Apache konfiguriert wird und beides mit Domains arbeitet.
Virtual Host = Apache liefert die Dateien selbst aus. Er liest die Dateien vom Dateisystem und gibt sie an den Client zurück.
flowchart LR
C[Client] -->|tbz.ch| A[Apache Virtual Host]
A -->|liest Dateien| F[/var/www/tbz/]
Reverse Proxy = Apache leitet die Anfrage an einen anderen Dienst weiter und gibt dessen Antwort zurück.
flowchart LR
C[Client] -->|phpmyadmin.tbz.ch| A[Apache Reverse Proxy]
A -->|weiterleiten| P[phpMyAdmin auf Port 8080]
| Virtual Host | Reverse Proxy | |
|---|---|---|
| Apache liefert... | Eigene Dateien | Antwort eines anderen Dienstes |
| Konfiguration | DocumentRoot /var/www/... |
ProxyPass http://localhost:8080 |
| Typischer Einsatz | Statische Sites, PHP-Apps | Interne Dienste, Microservices |
| Dateisystem nötig? | Ja | Nein |
Kombination ist möglich: Ein Apache-Server kann gleichzeitig Virtual Hosts für eigene Inhalte und Reverse Proxy für andere Dienste betreiben – jeder auf einer anderen Domain oder einem anderen Pfad.
Vergleich¶
| Proxy | Reverse Proxy | |
|---|---|---|
| Schützt | Den Client | Den Server |
| Sichtbar für | Den Server | Den Client |
| Typischer Einsatz | Unternehmensnetze, Anonymisierung | Webserver, Load Balancer |
2. Datenbanken¶
Relationale Datenbanken (SQL)¶
Relationale Datenbanken speichern Daten in Tabellen mit festen Spalten und Zeilen. Zwischen Tabellen gibt es Beziehungen (Relations).
Tabelle: users Tabelle: posts
+----+----------+ +----+---------+---------+
| id | name | | id | title | user_id |
+----+----------+ +----+---------+---------+
| 1 | Alice | | 1 | Hallo | 1 |
| 2 | Bob | | 2 | Welt | 2 |
+----+----------+ +----+---------+---------+
Eigenschaften: - Festes Schema (Struktur muss vorher definiert werden) - Abfragesprache: SQL (Structured Query Language) - Starke Konsistenz (ACID-Prinzip) - Geeignet für strukturierte, zusammenhängende Daten
Beispiele: MySQL, MariaDB, PostgreSQL, SQLite
NoSQL-Datenbanken¶
NoSQL-Datenbanken verzichten auf das starre Tabellenschema. Es gibt verschiedene Arten:
| Typ | Beschreibung | Beispiel |
|---|---|---|
| Document | Daten als JSON-Dokumente | MongoDB |
| Key-Value | Einfache Schlüssel-Wert-Paare | Redis |
| Column | Spaltenorientiert, für grosse Datenmengen | Cassandra |
| Graph | Beziehungen zwischen Knoten | Neo4j |
Eigenschaften: - Flexibles Schema (Struktur kann sich ändern) - Horizontal skalierbar (viele Server statt einem grossen) - Schnell bei bestimmten Abfragemustern - Weniger strenge Konsistenz
Wann SQL, wann NoSQL?¶
| Situation | Empfehlung |
|---|---|
| Strukturierte Daten mit Beziehungen (z.B. WordPress) | SQL |
| Grosse Mengen unstrukturierter Daten | NoSQL |
| Konsistenz ist kritisch (z.B. Bankdaten) | SQL |
| Hohe Schreibrate, verteilte Systeme | NoSQL |
| Einfache Abfragen, bekanntes Schema | SQL |
Im Modul 158: WordPress verwendet MySQL/MariaDB – eine relationale Datenbank. Die Datenbankstruktur (Tabellen wie
wp_posts,wp_users) ist fest definiert.
3. REST API¶
Was ist eine API?¶
Eine API (Application Programming Interface) ist eine Schnittstelle, über die zwei Programme miteinander kommunizieren. Eine API definiert, welche Anfragen möglich sind und wie die Antworten aussehen.
REST¶
REST (Representational State Transfer) ist ein Architekturstil für APIs über HTTP. Eine REST API verwendet die bekannten HTTP-Methoden:
| HTTP-Methode | Aktion | Beispiel |
|---|---|---|
GET |
Daten lesen | Alle Benutzer abrufen |
POST |
Daten erstellen | Neuen Benutzer anlegen |
PUT |
Daten ersetzen | Benutzer vollständig aktualisieren |
PATCH |
Daten teilweise aktualisieren | Nur Name ändern |
DELETE |
Daten löschen | Benutzer löschen |
Beispiel: WordPress REST API¶
WordPress hat eine eingebaute REST API. Du kannst z.B. alle Beiträge abrufen:
Antwort (vereinfacht):
[
{
"id": 1,
"title": { "rendered": "Hallo Welt" },
"link": "https://deine-domain.ch/hallo-welt/"
}
]
Datenaustausch vor APIs – wie machte man das früher?¶
Bevor APIs verbreitet waren, gab es kein standardisiertes Protokoll für den Datenaustausch zwischen Systemen. Die gängigen Methoden:
1. Datei-Export / -Import (ETL) System A exportiert Daten als CSV, XML oder SQL-Dump. System B importiert die Datei manuell. Dieser Prozess heisst ETL (Extract, Transform, Load).
Probleme: - Manueller Aufwand, fehleranfällig - Keine Echtzeit-Synchronisation - Unterschiedliche Formate zwischen Systemen - Kein definierter Standard – jedes System hatte sein eigenes Format
2. Direkter Datenbankzugriff System B verbindet sich direkt mit der Datenbank von System A und liest Daten aus. Heute als schlechte Praxis geltend, weil: - Interne Datenbankstruktur nach aussen exponiert - Jede Änderung der DB-Struktur bricht die Integration - Keine Zugriffskontrolle auf Ebene einzelner Operationen
3. Screen Scraping Ein Programm lädt die HTML-Seite eines Systems und extrahiert Daten aus dem HTML-Code – wie ein Roboter der eine Website "liest". Fragil, weil jede Layout-Änderung das Programm bricht.
Das Problem das APIs gelöst haben¶
Das zentrale Problem war die enge Kopplung zwischen Systemen. Wenn sich System A änderte, brach die Integration mit System B.
APIs lösen das durch einen Vertrag: Die API-Schnittstelle bleibt stabil, auch wenn sich die interne Implementierung ändert. System B muss nicht wissen wie System A intern funktioniert – es muss nur die API kennen.
flowchart LR
subgraph Früher
A1[System A\nDB-Struktur] <-->|direkt| B1[System B]
end
subgraph Heute
A2[System A] -->|stabile API| B2[System B]
end
Weitere Vorteile von APIs: - Automatisierbar: Kein manueller Export/Import mehr nötig - Echtzeit: Daten können sofort übertragen werden - Zugangskontrolle: API-Keys steuern wer was darf - Plattformunabhängig: Egal ob Windows, Linux, Mobile – HTTP spricht jeder
Warum sind APIs wichtig für Migrationen?¶
Bei einer Migration musst du oft Daten zwischen Systemen übertragen. APIs ermöglichen es: - Daten aus dem alten System zu exportieren - Daten ins neue System zu importieren - Integrations zwischen verschiedenen Diensten zu bauen
Testfragen¶
- Was ist der Unterschied zwischen einem Proxy und einem Reverse Proxy? Zeichne ein Diagramm.
- Was ist der Unterschied zwischen einem Virtual Host und einem Reverse Proxy? Wann setzt du welches ein?
- Nenne zwei konkrete Einsatzzwecke eines Reverse Proxy im Kontext eines Webservers.
- Was ist der Hauptunterschied zwischen SQL und NoSQL Datenbanken?
- WordPress verwendet MySQL. Warum ist SQL hier sinnvoller als NoSQL?
- Was bedeutet
GET /wp-json/wp/v2/posts? Erkläre Methode und Pfad. - Du möchtest einen neuen Eintrag über eine REST API erstellen. Welche HTTP-Methode verwendest du?
- Nenne zwei Methoden wie Daten zwischen Systemen ausgetauscht wurden bevor APIs existierten. Was war das Hauptproblem dabei?
- Was bedeutet "enge Kopplung" zwischen zwei Systemen und wie lösen APIs dieses Problem?