bg_image
header

Open Authorization - OAuth

OAuth (Open Authorization) ist ein offenes Standardprotokoll für Autorisierungen, das es Anwendungen ermöglicht, auf Ressourcen eines Nutzers zuzugreifen, ohne dessen Zugangsdaten (z. B. Passwort) direkt zu kennen. Es wird häufig für Single Sign-On (SSO) und API-Zugriffe verwendet.

Wie funktioniert OAuth?

OAuth arbeitet mit Tokens, die einer Anwendung erlauben, im Namen eines Nutzers auf eine Ressource zuzugreifen. Der typische Ablauf sieht so aus:

  1. Anfrage auf Autorisierung: Eine Anwendung (Client) möchte auf geschützte Daten eines Nutzers zugreifen (z. B. Facebook-Kontakte).
  2. Nutzer-Authentifizierung: Der Nutzer wird zur Anmeldeseite des Anbieters (z. B. Google, Facebook) weitergeleitet und gibt seine Login-Daten ein.
  3. Erteilung einer Erlaubnis: Der Nutzer bestätigt, dass die Anwendung auf bestimmte Daten zugreifen darf.
  4. Token-Erhalt: Die Anwendung erhält ein Access Token, mit dem sie auf die freigegebenen Daten zugreifen kann.
  5. Zugriff auf Ressourcen: Die Anwendung verwendet das Token, um Anfragen an den API-Server zu stellen, ohne das Nutzerpasswort zu kennen.

OAuth 1.0 vs. OAuth 2.0

  • OAuth 1.0: Komplexer mit kryptografischer Signatur, aber sicher.
  • OAuth 2.0: Einfacher, nutzt HTTPS zur Absicherung, wird heute meist verwendet.

Beispiel-Anwendungen von OAuth

  • "Mit Google/Facebook/Apple anmelden"-Buttons
  • Drittanbieter-Apps, die auf APIs von Google Drive, Dropbox oder Twitter zugreifen
  • Zahlungsdienste wie PayPal, die sich in andere Apps integrieren

 


Twig

Twig ist ein leistungsfähiges und flexibles Templating-System für PHP, das häufig in Symfony, aber auch in anderen PHP-Projekten verwendet wird. Es ermöglicht eine klare Trennung von Logik und Präsentation und bietet viele nützliche Features für die Frontend-Entwicklung.


Wichtige Merkmale von Twig

1. Einfache Syntax mit Platzhaltern ({{ }})

Twig verwendet doppelte geschweifte Klammern für die Ausgabe von Variablen:

<p>Hallo, {{ name }}!</p>

→ Wenn name = "Max" ist, wird ausgegeben:
"Hallo, Max!"


2. Steuerstrukturen ({% %})

Twig unterstützt if-else, Schleifen und andere Kontrollstrukturen:

If-Else

{% if user.isAdmin %}
    <p>Willkommen, Admin!</p>
{% else %}
    <p>Willkommen, Nutzer!</p>
{% endif %}

Schleifen (for)

<ul>
{% for user in users %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

3. Template-Vererbung

Twig unterstützt das Konzept von "Base-Layouts", ähnlich wie Blade in Laravel.

Eltern-Template (base.html.twig)

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Meine Seite{% endblock %}</title>
</head>
<body>
    <header>{% block header %}Standard-Header{% endblock %}</header>
    <main>{% block content %}{% endblock %}</main>
</body>
</html>

Kind-Template (page.html.twig)

{% extends 'base.html.twig' %}

{% block title %}Startseite{% endblock %}

{% block content %}
    <p>Willkommen auf meiner Seite!</p>
{% endblock %}

→ Die Blöcke überschreiben die Standardinhalte des Basis-Templates.


4. Inkludieren von Templates

Man kann wiederverwendbare Teile wie Header oder Footer einbinden:

{% include 'partials/navbar.html.twig' %}

5. Filter & Funktionen

Twig enthält viele Filter, um Inhalte zu formatieren:

Filter Beispiel Ausgabe
upper `{{ "text" upper }}`
lower `{{ "TEXT" lower }}`
length `{{ "Hallo" length }}`
date `{{ "now" date("d.m.Y") }}`

6. Sicherheit & Escaping

Twig escapet HTML automatisch, um XSS-Angriffe zu verhindern:

{{ "<script>alert('XSS');</script>" }}

→ Gibt nur &lt;script&gt;alert('XSS');&lt;/script&gt; aus.

Möchtest du HTML ungefiltert ausgeben, nutze |raw:

{{ "<strong>Fett</strong>"|raw }}

7. Erweiterbarkeit

  • Twig unterstützt eigene Filter & Funktionen.
  • Man kann PHP-Objekte und Arrays direkt in Twig verwenden.

View

Die View ist die Präsentationsschicht in der MVC-Architektur. Sie ist dafür verantwortlich, die Daten aus dem Model in einer für den Benutzer verständlichen Form darzustellen.


Hauptaufgaben der View

Darstellung von Daten: Zeigt Informationen aus dem Model an (z. B. eine Liste von Blogartikeln).
Reaktion auf Benutzerinteraktionen: Nimmt Eingaben entgegen und leitet sie an den Controller weiter.
Formatierung & Layout: Strukturiert Inhalte mit HTML, CSS oder Templates (z. B. in Laravel Blade oder Twig).
Vermeidung von Geschäftslogik: Enthält keine Datenverarbeitung, sondern nur Darstellung.


Wie funktioniert die View in MVC?

  1. Der Benutzer sendet eine Anfrage (z. B. „Zeige alle Blogartikel“).
  2. Der Controller ruft das Model auf, um die Daten abzurufen.
  3. Das Model liefert die benötigten Daten zurück.
  4. Die View erhält die Daten vom Controller und stellt sie dar.

Beispiel: Blog-System (View in Laravel Blade)

<!-- resources/views/blog/index.blade.php -->
@extends('layouts.app')

@section('content')
    <h1>Blog Posts</h1>
    @foreach ($posts as $post)
        <div>
            <h2>{{ $post->title }}</h2>
            <p>{{ $post->content }}</p>
        </div>
    @endforeach
@endsection

🔹 @foreach: Durchläuft die Liste der Blogartikel und zeigt sie an.
🔹 {{ $post->title }}: Gibt den Titel des Blogartikels aus.


Fazit

✔ Die View sorgt für die Darstellung der Daten, ohne sie selbst zu verarbeiten.
✔ Sie hilft, die Trennung von Logik und Darstellung sauber umzusetzen.
✔ Durch Templates oder Frontend-Technologien (z. B. Vue.js, React) kann die View dynamisch gestaltet werden.

 


Model

Das Model ist die Daten- und Logikschicht in der MVC-Architektur. Es verwaltet die Daten der Anwendung und stellt sicher, dass sie korrekt gespeichert, abgerufen und verarbeitet werden.


Hauptaufgaben des Models

Datenverwaltung: Speichert und verwaltet Daten, z. B. in einer Datenbank.
Geschäftslogik: Enthält Regeln und Berechnungen (z. B. Rabattberechnung für Bestellungen).
Datenvalidierung: Überprüft, ob Eingaben korrekt sind (z. B. ob eine E-Mail-Adresse gültig ist).
Kommunikation mit der Datenbank: Führt CRUD-Operationen aus (Create, Read, Update, Delete).


Wie funktioniert das Model in MVC?

  1. Der Benutzer sendet eine Anfrage (z. B. „Zeige alle Blogartikel“).
  2. Der Controller verarbeitet die Anfrage und ruft das Model auf.
  3. Das Model fragt die Datenbank ab und liefert die Daten zurück.
  4. Der Controller übergibt die Daten an die View zur Anzeige.

Beispiel: Blog-System (Model in Laravel)

class BlogPost extends Model {
    protected $fillable = ['title', 'content']; // Erlaubte Felder für Massenverarbeitung

    // Beziehung: Ein Blogpost gehört zu einem Benutzer
    public function user() {
        return $this->belongsTo(User::class);
    }
}

🔹 fillable: Bestimmt, welche Felder gespeichert werden dürfen.
🔹 belongsTo(User::class): Zeigt an, dass jeder Blogpost zu einem Benutzer gehört.


Fazit

✔ Das Model verwaltet alle Daten und Geschäftslogik der Anwendung.
✔ Es sorgt für eine klare Trennung von Daten und Darstellung.
Änderungen an der Datenstruktur müssen nur im Model erfolgen, nicht in der gesamten Anwendung.

 


Controller

Ein Controller ist eine zentrale Komponente im Model-View-Controller (MVC)-Architekturmuster. Er fungiert als Vermittler zwischen der Benutzeroberfläche (View) und der Geschäftslogik bzw. den Daten (Model).

Aufgaben eines Controllers

  1. Empfangen von Benutzereingaben

    • Der Controller nimmt Anfragen entgegen (z. B. aus einem Webformular oder einer API-Anfrage).
  2. Verarbeiten der Anfrage

    • Er analysiert die Eingaben und entscheidet, welche Aktion ausgeführt werden soll.
    • Falls nötig, validiert er die Daten.
  3. Kommunikation mit dem Model

    • Der Controller leitet die Anfrage an das Model weiter, um Daten abzurufen, zu ändern oder zu speichern.
  4. Aktualisieren der View

    • Sobald das Model die Anfrage verarbeitet hat, gibt der Controller die Daten an die View weiter.
    • Die View wird dann mit den neuen Informationen aktualisiert.

Beispiel: Blog-System

Angenommen, ein Benutzer möchte einen neuen Blogbeitrag erstellen:

  1. Der Benutzer füllt ein Formular aus und klickt auf „Speichern“ (Eingabe an den Controller).
  2. Der Controller empfängt die Anfrage, validiert die Eingabe und sendet sie an das Model.
  3. Das Model speichert den Beitrag in der Datenbank.
  4. Der Controller ruft die aktualisierte Liste der Beiträge ab und gibt sie an die View weiter.
  5. Die View zeigt nun den neuen Blogbeitrag an.

Beispielcode in PHP (Laravel)

class BlogController extends Controller {
    public function store(Request $request) {
        // Validierung der Benutzereingabe
        $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
        ]);

        // Neues Blog-Post-Model erstellen und speichern
        BlogPost::create([
            'title' => $request->input('title'),
            'content' => $request->input('content'),
        ]);

        // Weiterleitung zur Blog-Übersicht
        return redirect()->route('blog.index')->with('success', 'Post erstellt!');
    }
}

Fazit

✔ Ein Controller steuert den Ablauf einer Anwendung und trennt Geschäftslogik von der Präsentation.
✔ Er ermöglicht eine saubere Code-Struktur, da jede Komponente (Model, View, Controller) eine klare Aufgabe hat.
✔ In modernen Frameworks wie Laravel, Django oder ASP.NET gibt es oft vorgefertigte Routing-Mechanismen, die automatisch Anfragen den richtigen Controllern zuordnen.

 

 


Catalyst Web Framework

Das Catalyst Framework ist ein flexibles und leistungsstarkes Web-Framework für Perl. Es ermöglicht die Entwicklung skalierbarer und wartbarer Webanwendungen und orientiert sich an dem Model-View-Controller (MVC)-Designmuster.

Hauptmerkmale von Catalyst

MVC-Architektur – Saubere Trennung von Geschäftslogik, Darstellung und Datenverwaltung
Flexibilität – Unterstützt verschiedene Template-Systeme und ORM-Lösungen wie DBIx::Class
Erweiterbarkeit – Viele Plugins und Module verfügbar
Asynchronität – Lässt sich mit Event-Driven Architekturen kombinieren
REST-APIs & WebSockets – Unterstützung für moderne Web-Technologien

Anwendungsfälle


HTTP Anfrage Header

Anfrage-Header (Request Headers) sind HTTP-Header, die ein Client (z. B. ein Webbrowser oder eine API-Anfrage) an den Server sendet, um zusätzliche Informationen über die Anfrage, den Client oder die gewünschten Inhalte bereitzustellen.

Wichtige Anfrage-Header:

1. Host

  • Gibt die Ziel-Domain oder IP-Adresse des Servers an.
  • Beispiel:
Host: www.example.com

2. User-Agent

  • Enthält Informationen über den Client, wie Browser-Typ oder Betriebssystem.
  • Beispiel:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

3. Accept

  • Definiert, welche Inhaltstypen der Client akzeptieren kann.
  • Beispiel:
Accept: text/html, application/json

4. Accept-Language

  • Gibt die bevorzugte Sprache des Clients an.
  • Beispiel:
Accept-Language: de-DE, en-US

5. Accept-Encoding

  • Zeigt an, welche Kompressionsformate der Client unterstützt.
  • Beispiel:
Accept-Encoding: gzip, deflate, br

6. Referer

  • Gibt die vorherige Seite an, von der der Benutzer gekommen ist.
  • Beispiel:
Referer: https://www.google.com/

7. Authorization

  • Wird für die Authentifizierung bei geschützten Ressourcen verwendet.
  • Beispiel (Basic Auth):
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

8. Cookie

  • Enthält Cookies, die der Server zuvor gesetzt hat.
  • Beispiel:
Cookie: sessionId=abc123; theme=dark

9. Content-Type (bei POST/PUT-Anfragen)

  • Gibt das Datenformat des Anfrageinhalts an.
  • Beispiel:
Content-Type: application/json

10. Origin

  • Gibt die Ursprungs-URL an und wird oft bei Cross-Origin-Anfragen genutzt.
  • Beispiel:
Origin: https://www.example.com

Diese Header helfen dem Server, die Anfrage zu verstehen und entsprechend zu reagieren, indem sie Details über den Client, die bevorzugten Inhalte und Sicherheitsaspekte liefern.


Hot Module Replacement - HMR

Hot Module Replacement (HMR) ist eine Webentwicklungstechnik, die es ermöglicht, Codeänderungen in einer laufenden Anwendung sofort anzuwenden, ohne die gesamte Seite neu zu laden. Dies verbessert die Entwicklungsproduktivität erheblich, da der Zustand der Anwendung (z. B. Benutzereingaben oder UI-Zustand) erhalten bleibt.

Wie funktioniert HMR?

HMR wird in modernen Build-Tools wie Webpack, Vite, Parcel oder esbuild verwendet. Der Prozess läuft folgendermaßen ab:

  1. Dateiänderung erkannt: Wenn du eine Datei speicherst, erkennt der HMR-Mechanismus die Änderung.
  2. Modul neu kompiliert: Nur das betroffene Modul wird neu kompiliert und nicht der gesamte Code.
  3. Update in die Anwendung injiziert: Der neue Code wird direkt ins laufende JavaScript- oder CSS-Modul geladen.
  4. State bleibt erhalten: Falls richtig konfiguriert, bleiben React-States, Vue-Reaktivität oder andere UI-Zustände bestehen.

Vorteile von HMR

Schnellere Entwicklungszeiten – Kein vollständiger Seitenreload nötig.
Erhalt des Anwendungszustands – Besonders nützlich bei React, Vue oder anderen SPA-Frameworks.
Direkte CSS-Updates – Änderungen an CSS-Dateien werden sofort sichtbar.
Bessere DX (Developer Experience) – Weniger Unterbrechungen beim Coden.

Wann funktioniert HMR nicht?

  • Bei tiefgreifenden Änderungen, z. B. an globalen Variablen oder an der Konfiguration der Anwendung.
  • Wenn das Framework oder die Bibliothek keine HMR-Unterstützung bietet.
  • In Produktionsumgebungen wird HMR nicht verwendet – dort erfolgt ein klassisches Reloading.

Beispiel mit Webpack

Falls du Webpack nutzt, kannst du HMR aktivieren mit:

if (module.hot) {
  module.hot.accept('./module.js', function() {
    console.log('Module updated!');
  });
}

Dies stellt sicher, dass Änderungen an module.js geladen werden, ohne dass die gesamte Anwendung neu startet.

 


CORS - Cross Origin Resource Sharing

CORS (Cross-Origin Resource Sharing) ist ein Sicherheitsmechanismus, der von Webbrowsern implementiert wird, um zu kontrollieren, welche Webseiten auf Ressourcen von anderen Domains zugreifen dürfen. Standardmäßig blockieren Browser aus Sicherheitsgründen sogenannte Cross-Origin-Anfragen, also Anfragen von einer Webseite an eine andere Domain, ein anderes Protokoll oder einen anderen Port.

Warum gibt es CORS?

Ohne CORS könnten bösartige Webseiten im Hintergrund Anfragen an andere Server senden (z. B. API-Server oder Banking-Seiten), wodurch sensible Daten gestohlen oder missbraucht werden könnten (Cross-Site Request Forgery, CSRF). CORS sorgt dafür, dass nur explizit erlaubte Webseiten auf Ressourcen zugreifen dürfen.

Wie funktioniert CORS?

Wenn eine Webanwendung eine Cross-Origin-Anfrage stellt (z. B. von http://example.com an https://api.example.com), sendet der Browser automatisch eine CORS-Anfrage. Der Server kann dann in den HTTP-Headern antworten, ob die Anfrage erlaubt ist:

  1. Ohne CORS-Header:
    Der Browser blockiert die Anfrage.

  2. Mit CORS-Headern:
    Der Server kann mit Access-Control-Allow-Origin: * (alle Domains) oder einer bestimmten Domain (Access-Control-Allow-Origin: https://example.com) antworten. Damit wird der Zugriff erlaubt.

Preflight-Requests

Für einige Anfragen (z. B. mit PUT, DELETE, speziellen Headern) führt der Browser einen Preflight-Request mit der OPTIONS-Methode aus. Der Server muss dann mit den richtigen CORS-Headern antworten, um die Hauptanfrage zu ermöglichen.

Fazit

CORS ist eine wichtige Sicherheitsmaßnahme, die verhindert, dass unerlaubte Webseiten auf fremde Ressourcen zugreifen. Entwickler müssen serverseitig die richtigen Header setzen, um den Zugriff für legitime Clients zu erlauben.


Flask

Das Flask Framework ist ein beliebtes, leichtgewichtiges Webframework für die Programmiersprache Python. Es wird häufig für die Entwicklung von Webanwendungen und APIs verwendet und zeichnet sich durch seine Einfachheit und Flexibilität aus. Flask ist ein sogenanntes Micro-Framework, da es nur die grundlegenden Funktionen für die Webentwicklung bietet und keine unnötigen Zusatzfunktionen oder Bibliotheken enthält. Dadurch bleibt es schlank und anpassungsfähig.

Eigenschaften von Flask

  1. Minimalistisch: Flask liefert nur das Nötigste, wie Routing, URL-Management und Vorlagen-Rendering (Template Rendering).
  2. Erweiterbar: Viele zusätzliche Funktionen (z. B. Datenbankanbindung, Authentifizierung) können mit Erweiterungen wie Flask-SQLAlchemy oder Flask-Login hinzugefügt werden.
  3. Flexibilität: Entwickler haben die Freiheit, die Architektur der Anwendung selbst zu bestimmen, da Flask keine festen Vorgaben macht.
  4. Jinja2: Flask nutzt das Jinja2-Template-System, um HTML-Seiten dynamisch zu erstellen.
  5. Werkzeug: Flask basiert auf Werkzeug, einer WSGI-Bibliothek (Web Server Gateway Interface), die die Grundlage für viele Python-Webanwendungen bildet.

Wann wird Flask verwendet?

Flask eignet sich besonders gut für:

  • Kleine bis mittelgroße Projekte
  • Schnelles Prototyping
  • APIs und Microservices
  • Projekte, bei denen Entwickler maximale Kontrolle über die Struktur wünschen

Beispiel für eine einfache Flask-Anwendung:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

Flask vs. Django

Im Vergleich zu Django (einem umfassenderen Python-Webframework) ist Flask weniger umfangreich, bietet jedoch mehr Freiheit. Während Django eine „Batteries included“-Philosophie verfolgt und viele Funktionen bereits integriert hat, ist Flask ideal, wenn du nur das benötigst, was du selbst einbauen möchtest.