Zum Inhalt

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:

GET https://deine-domain.ch/wp-json/wp/v2/posts

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).

System A → Export als CSV → manuell übertragen → Import in System B

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

  1. Was ist der Unterschied zwischen einem Proxy und einem Reverse Proxy? Zeichne ein Diagramm.
  2. Was ist der Unterschied zwischen einem Virtual Host und einem Reverse Proxy? Wann setzt du welches ein?
  3. Nenne zwei konkrete Einsatzzwecke eines Reverse Proxy im Kontext eines Webservers.
  4. Was ist der Hauptunterschied zwischen SQL und NoSQL Datenbanken?
  5. WordPress verwendet MySQL. Warum ist SQL hier sinnvoller als NoSQL?
  6. Was bedeutet GET /wp-json/wp/v2/posts? Erkläre Methode und Pfad.
  7. Du möchtest einen neuen Eintrag über eine REST API erstellen. Welche HTTP-Methode verwendest du?
  8. Nenne zwei Methoden wie Daten zwischen Systemen ausgetauscht wurden bevor APIs existierten. Was war das Hauptproblem dabei?
  9. Was bedeutet "enge Kopplung" zwischen zwei Systemen und wie lösen APIs dieses Problem?