Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

  1. Startseite
  2. Blog
  3. Softwareentwicklung

Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Mit einem JWT kann ein Server einer Anfrage vertrauen, ohne etwas nachschlagen zu müssen. Erstellen Sie eines von Grund auf, versuchen Sie es zu manipulieren und beobachten Sie, wie es scheitert. Anschließend erfahren Sie, wann Token Sitzungen schlagen und wie Sie sie sicher verwenden.

9 Min. Lesezeit
Was ist JWT? JSON Web Tokens anhand eines funktionierenden Beispiels erklärt

Das Wichtigste

  • Ein JWT ist ein kompakter, signierter Token mit drei Teilen: Header, Nutzlast und Signatur.
  • Die Signatur beweist, dass ein Token nicht geändert wurde, sodass der Server ihm ohne Nachschlagen vertrauen kann.
  • Die Nutzlast ist für jedermann lesbar, also geben Sie niemals Geheimnisse hinein.
  • Tokens sind schwer zu widerrufen. Halten Sie sie daher kurzlebig und verifizieren Sie sie bei einer vertrauenswürdigen Bibliothek.

Woher weiß ein Server nach der Anmeldung, dass jede spätere Anfrage wirklich von Ihnen stammt? Eine beliebte Antwort ist ein JSON Web Token oder JWT, normalerweise ausgesprochen „jot“. Dabei handelt es sich um kleine, signierte Daten, die der Client bei jeder Anfrage sendet und die der Server überprüfen kann, ohne eine Datenbank anzugreifen.

Der schnellste Weg, ein JWT zu verstehen, besteht darin, eines zu erstellen und dann zu versuchen, es zu zerstören. Wir haben das nur mit der Standardbibliothek von Python auf Python 3.13 gemacht, und die folgende Ausgabe stammt von diesem Lauf. Dieser Code dient zum Lernen. Verwenden Sie in einer realen Anwendung eine gut gepflegte Bibliothek, da es bei den Details der Verifizierung leicht zu Fehlern kommen kann.

Was ist ein JWT?

JWT ist ein offener Standard, definiert in RFC 7519, zur Weitergabe von Ansprüchen zwischen zwei Parteien als kompakte Zeichenfolge. Ein Anspruch ist einfach eine Aussage, wie zum Beispiel „Die ID dieses Benutzers ist 42“. Da der Token signiert ist, kann der Empfänger bestätigen, wer ihn ausgegeben hat und dass niemand ihn verändert hat.

Denken Sie an ein Festival-Armband. Die Mitarbeiter am Gate kontrollieren Ihr Ticket einmal und geben Ihnen ein Band, das schwer zu fälschen ist. Danach blickt jeder Stand nur noch auf die Band, ohne dass ein Anruf beim Ticketschalter erforderlich ist. Ein JWT funktioniert für eine API weitgehend auf die gleiche Weise.

So funktioniert die JWT-Anmeldung

  1. Der Benutzer sendet einen Benutzernamen und ein Passwort an den Anmeldeendpunkt.
  2. Der Server prüft sie und erstellt ein signiertes Token.
  3. Der Client speichert den Token.
  4. Jede spätere Anfrage enthält es, normalerweise in einem Header: Authorization: Bearer <token>.
  5. Der Server überprüft die Signatur und das Ablaufdatum und liest dann die Ansprüche.

Der Hauptvorteil liegt in Schritt 5. Der Server muss nicht nach einer Sitzung suchen, was praktisch ist, wenn viele Dienste oder Server dasselbe Token überprüfen müssen. Wenn Sie mit APIs noch nicht vertraut sind, beginnen Sie mit Was ist eine API?.

Die drei Teile eines JWT

Ein JWT sieht aus wie zufälliger Text, besteht jedoch aus drei Base64URL-codierten Abschnitten, die durch Punkte getrennt sind. Hier ist eines, das wir generiert haben:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiI0MiIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNzkzNTAwMDAwLCJleHAiOjE3OTM1MDA5MDB9
.7YfUDH_T-iDh8bMmUT8mmKYwOstzT8Ty--DTTAmQGWM

Zur besseren Lesbarkeit haben wir Zeilenumbrüche eingefügt. Die Dekodierung der ersten beiden Teile ergibt einfaches JSON:

Header:  {"alg":"HS256","typ":"JWT"}
Payload: {"sub":"42","role":"user","iat":1793500000,"exp":1793500900}
Teil Enthält Zweck
Kopfzeile Tokentyp und Signaturalgorithmus Beschreibt, wie das Token überprüft wird
Nutzlast Ansprüche über den Benutzer oder die Sitzung Die tatsächlichen Informationen
Unterschrift Ein Hash der ersten beiden Teile unter Verwendung eines Schlüssels Beweist Integrität und Herkunft

Standardansprüche

Anspruch Name Bedeutung
sub Betreff Um wen es sich bei dem Token handelt, normalerweise eine Benutzer-ID
iss Emittent Wer hat den Token erstellt?
aud Publikum Für wen der Token bestimmt ist
exp Ablauf Wenn das Token nicht mehr gültig ist
iat Ausgestellt am Als es erstellt wurde
nbf Nicht vorher Wenn es anfängt, gültig zu sein
jti JWT-ID Eine eindeutige ID für dieses Token

Sie können auch benutzerdefinierte Ansprüche hinzufügen, z. B. role. Zeiten sind Unix-Zeitstempel in Sekunden. Halten Sie die Nutzlast klein, da der Token bei jeder Anfrage übertragen wird.

Bauen Sie selbst eins

Zum Erstellen eines Tokens müssen die beiden JSON-Teile codiert und anschließend mithilfe von HMAC-SHA256 mit einem Geheimnis signiert werden:

import base64, hashlib, hmac, json

SECRET = b"demo-secret-do-not-use-in-production"

def b64url(data):
    return base64.urlsafe_b64encode(data).rstrip(b"=").decode()

def sign(message):
    return b64url(hmac.new(SECRET, message.encode(), hashlib.sha256).digest())

def create_token(payload):
    header = {"alg": "HS256", "typ": "JWT"}
    parts = [
        b64url(json.dumps(header, separators=(",", ":")).encode()),
        b64url(json.dumps(payload, separators=(",", ":")).encode()),
    ]
    message = ".".join(parts)
    return message + "." + sign(message)

Bei der Verifizierung wird die Signatur neu berechnet und mit der Signatur im Token verglichen. Nur jemand, der das Geheimnis kennt, kann ein passendes herstellen:

def verify_token(token, now):
    header, payload, signature = token.split(".")
    expected = sign(header + "." + payload)
    if not hmac.compare_digest(signature, expected):
        raise ValueError("bad signature")
    claims = json.loads(b64url_decode(payload))
    if claims["exp"] < now:
        raise ValueError("token expired")
    return claims

Ein gültiger Token hat seine Ansprüche wie erwartet zurückgegeben. compare_digest wird verwendet, da es in konstanter Zeit läuft, wodurch ein Informationsverlust durch Zeitunterschiede vermieden wird.

Versuchen Sie es zu manipulieren

Angenommen, ein Angreifer dekodiert die Nutzlast, ändert "role":"user" in "role":"admin", kodiert sie erneut und behält die alte Signatur. Wir haben dies zusammen mit zwei anderen Angriffen versucht:

Versuch Ergebnis
Die Rolle wurde in „Administrator“ geändert schlechte Signatur
Der Token wurde 1 Sekunde nach Ablauf verwendet Token abgelaufen
Setzen Sie "alg":"none" und entfernen Sie die Signatur schlechte Signatur

Dieser letzte Versuch zielt auf eine echte historische Schwäche ab. Einige Bibliotheken vertrauten einst dem Header des Tokens, sodass ein Angreifer einfach erklären konnte, dass keine Signatur erforderlich sei. Unser Code verwendet immer einen festen Algorithmus, weshalb er abgelehnt wurde. Geben Sie in einer echten Bibliothek immer die Algorithmen an, die Sie akzeptieren.

Signiert, nicht verschlüsselt

Dies ist der am meisten missverstandene Punkt bei JWTs. Unser gefälschter Token wurde abgelehnt, sein Inhalt war jedoch weiterhin einwandfrei lesbar:

{"sub":"42","role":"admin","iat":1793500000,"exp":1793500900}

Base64URL ist eine Kodierung, keine Verschlüsselung, und jeder kann sie ohne Schlüssel rückgängig machen. Die Signatur verhindert, dass Personen die Daten ändern, aber nicht, sie zu lesen. Geben Sie daher niemals Passwörter, Kartennummern oder private persönliche Daten in eine JWT-Nutzlast ein. Wenn der Inhalt ausgeblendet werden muss, verwenden Sie verschlüsselte Token (JWE) oder belassen Sie die Daten einfach auf dem Server.

HS256 vs. RS256

Aspekt HS256 RS256 oder ES256
Typ Symmetrisch Asymmetrisch
Schlüssel Ein gemeinsames Geheimnis Ein privater Schlüssel signiert, ein öffentlicher Schlüssel verifiziert
Wer kann Token erstellen? Jeder, der das Geheimnis hat Nur der private Schlüsselinhaber
Am besten für Ein Dienst oder eine kleine vertrauenswürdige Gruppe Viele Dienste, Dritte, Identitätsanbieter

Mit asymmetrischer Signatur können andere Dienste Token verifizieren, ohne ihre eigenen prägen zu können, was den Schaden begrenzt, wenn einer kompromittiert wird.

JWT vs. Sitzungen

JWTs werden oft als moderner Ersatz für Sitzungen präsentiert. In Wirklichkeit gibt es bei beiden Kompromisse:

Aspekt Serversitzung JWT
Wo der Staat lebt Auf dem Server Im Token
Suchen Sie bei jeder Anfrage nach Normalerweise Nicht erforderlich
Abmelden oder Widerrufen Ganz einfach, löschen Sie die Sitzung Hart vor Ablauf
Größe je Anfrage Kleiner Ausweis Größeres Token (unseres war 161 Zeichen)
Über viele Dienste hinweg Benötigt gemeinsamen Speicher Jeder kann es direkt überprüfen
Berechtigungen ändern Gilt sofort Der alte Token bleibt bis zum Ablauf gültig

Für eine herkömmliche, vom Server gerenderte Website ist ein Sitzungscookie oft einfacher und sicherer. JWTs sind tendenziell sinnvoller für APIs, die von mehreren Diensten genutzt werden, oder für mobile Clients.

Tipp: Wählen Sie JWT nicht, nur weil es zustandslos klingt. Viele reale Systeme fügen eine Sperrliste oder eine Datenbankprüfung hinzu, um das Abmelden zu unterstützen, wodurch die Suche wiederhergestellt wird, die JWT vermeiden sollte.

Wo Token in einem Browser gespeichert werden

Standort XSS-Risiko CSRF-Risiko Notizen
lokaler Speicher Hoch, da Skripte es lesen können Niedrig Einfach, aber jedem injizierten Skript ausgesetzt
HttpOnly-Cookie Niedriger, da Skripte es nicht lesen können Braucht Schutz Verwenden Sie Secure und SameSite
In-Memory-Variable Niedriger Niedrig Bei der Aktualisierung verloren, daher ist ein Aktualisierungsfluss erforderlich

Viele Sicherheitsleitfäden bevorzugen HttpOnly, Secure, SameSite Cookies für Web-Apps. Was auch immer Sie wählen, verwenden Sie immer HTTPS. Informationen zum Senden eines Tokens aus JavaScript finden Sie in unserem JavaScript Fetch API-Tutorial.

Token aktualisieren

Ein kurzer Ablauf begrenzt den Schaden durch einen gestohlenen Token, aber niemand möchte sich alle 15 Minuten anmelden. Die übliche Lösung verwendet zwei Token:

  • Zugriffstoken: ist von kurzer Dauer, z. B. Minuten, und wird mit jeder API-Anfrage gesendet.
  • Aktualisierungstoken: langlebiger, sorgfältiger gespeichert und nur zum Erhalten neuer Zugriffstoken verwendet.

Der Server verfolgt die Aktualisierungstokens, sodass er diese widerrufen kann, was Ihnen eine praktische Abmeldung ermöglicht. Wenn Sie sie bei jeder Verwendung wechseln, können Sie außerdem einen Diebstahl erkennen, da ein gestohlener alter Token erneut abgespielt wird.

Häufige Sicherheitsfehler

  • Dekodierung ohne Verifizierung. Das Lesen einer Nutzlast macht sie nicht vertrauenswürdig. Überprüfen Sie immer die Signatur.
  • Jeden Algorithmus akzeptieren. Legen Sie eine explizite Liste zulässiger Algorithmen fest.
  • Verwendung eines schwachen Geheimnisses. Kurze Geheimnisse können offline geknackt werden. Verwenden Sie einen langen Zufallswert und halten Sie ihn außerhalb der Quellcodeverwaltung.
  • Ablaufdatum überspringen. Token ohne exp können bei Diebstahl für immer funktionieren.
  • iss und aud werden nicht überprüft. Andernfalls kann ein für einen Dienst ausgestelltes Token von einem anderen akzeptiert werden.
  • Veralteten Ansprüchen vertrauen. Eine Rolle innerhalb eines Tokens kann veraltet sein, bis es abläuft.
  • Protokollierungs-Tokens. Jeder, der Ihre Protokolle liest, könnte sie wiederverwenden.
  • Fehlerpfade werden nicht getestet. Fügen Sie Tests für abgelaufene und geänderte sowie gültige Token hinzu. Unser Leitfaden zum API-Testen mit Postman kann hilfreich sein.

Fazit

Bei einem JWT handelt es sich um signierte Daten, denen ein Server ohne Nachschlagen vertrauen kann, kein geheimer Container und kein automatisches Upgrade über Sitzungen hinweg. Verwenden Sie eine kurze Ablauffrist, überprüfen Sie alles mit einer gepflegten Bibliothek und halten Sie private Daten von der Nutzlast fern. Um es selbst zu sehen, führen Sie ein kleines Skript wie unseres aus, ändern Sie ein Zeichen eines Tokens und beobachten Sie, wie die Überprüfung fehlschlägt.

Häufige Fragen

Wofür wird ein JWT verwendet?

JWTs werden hauptsächlich zur Authentifizierung und Autorisierung in APIs verwendet. Nach der Anmeldung sendet ein Client bei jeder Anfrage das Token und der Server überprüft es, um den Benutzer zu identifizieren.

Ist ein JWT verschlüsselt?

Normalerweise nicht. Ein Standard-JWT ist signiert und codiert, sodass jeder seine Nutzlast lesen kann. Die Signatur verhindert lediglich Änderungen. Verschlüsselte Token verwenden ein verwandtes Format namens JWE.

Wie lange sollte ein JWT dauern?

Zugriffstokens sind in der Regel nur von kurzer Dauer, oft nur wenige Minuten statt Tage. Koppeln Sie sie mit einem Aktualisierungstoken, damit sich Benutzer nicht ständig anmelden müssen.

Kann ein JWT widerrufen werden?

Nicht von selbst, da es bis zum Ablauf gültig bleibt. Der Widerruf erfordert eine serverseitige Nachverfolgung, z. B. eine Sperrliste, wodurch ein Teil des zustandslosen Vorteils entfällt.

Ist JWT besser als Sitzungen?

Keines ist immer besser. Sitzungen lassen sich einfacher widerrufen und eignen sich für viele Websites, während JWTs für APIs und Dienste geeignet sind, die die Identität unabhängig überprüfen müssen.

Lerne weiter

Arbeiten Sie mit Stack Quora

Benötigen Sie Hilfe beim Testen, WordPress oder SEO?

Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.

Lesen Sie weiter

Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung

Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.

Künstliche Intelligenz

KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert

KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…

Artikel lesen →
DevOps

Erklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht

Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…

Artikel lesen →
Softwareentwicklung

API-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern

API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…

Artikel lesen →
Testautomatisierung

Spott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen

Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …

Artikel lesen →
Softwaretests

Code-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet

Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…

Artikel lesen →
Datenbanken & SQL

DELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck

DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen

SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…

Artikel lesen →
Softwareentwicklung

TypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler

TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…

Artikel lesen →
Softwareentwicklung

Python *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen

Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…

Artikel lesen →
Softwareentwicklung

Python-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet

Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…

Artikel lesen →
Künstliche Intelligenz

Was sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können

Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…

Artikel lesen →
DevOps

Überwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces

Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…

Artikel lesen →
DevOps

Docker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten

Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…

Artikel lesen →
Testautomatisierung

TDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte

TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…

Artikel lesen →
Softwaretests

Benutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele

Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen

SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…

Artikel lesen →
Datenbanken & SQL

SQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler

SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…

Artikel lesen →
Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen

Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…

Artikel lesen →
Softwareentwicklung

Erklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen

Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…

Artikel lesen →
Künstliche Intelligenz

Was sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt

Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…

Artikel lesen →
DevOps

Blau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl

Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…

Artikel lesen →
Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…

Artikel lesen →
Softwaretests

Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele

Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…

Artikel lesen →
Softwaretests

Testfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet

Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…

Artikel lesen →
Datenbanken & SQL

SQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben

An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…

Artikel lesen →
Datenbanken & SQL

SQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung

SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…

Artikel lesen →
Softwareentwicklung

Tutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen

Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…

Artikel lesen →
Softwareentwicklung

Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…

Artikel lesen →
Softwareentwicklung

Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Python-Klassen und -Objekte erklärt mit Code, den wir ausgeführt haben: __init__, Methoden, Klassen- und Instanzattribute, Vererbung, Eigenschaften,…

Artikel lesen →
Künstliche Intelligenz

Was ist ein großes Sprachmodell? Wie LLMs funktionieren, ohne großen Hype erklärt

Was ist ein großes Sprachmodell? LLMs im Klartext erklärt: Token, Einbettungen, Aufmerksamkeit, Training, Temperatur- und Kontextfenster, eine klein…

Artikel lesen →
DevOps

Linux-Befehle für Anfänger: Der grundlegende Terminal-Leitfaden mit Beispielen

Linux-Befehle für Anfänger, gruppiert nach Aufgaben: Navigation, Dateien, Anzeigen von Protokollen, Grep, Pipes, Berechtigungen, Prozesse und Archiv…

Artikel lesen →
Testautomatisierung

Selenium vs. Playwright: Hauptunterschiede, Code im Vergleich und welche Sie wählen sollten

Selenium vs. Playwright im Vergleich: Architektur, Wartezeit, Browser- und Sprachunterstützung, Debugging, der gleiche Test in beiden Tools, Migrati…

Artikel lesen →
Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Erklärung der Äquivalenzpartitionierung: Wie man gültige und ungültige Partitionen findet, Beispiele für Alter, Passwörter und Gutscheine, von uns d…

Artikel lesen →
Softwaretests

Schweregrad vs. Priorität beim Softwaretest: Unterschiede, Matrix und reale Beispiele

Schweregrad vs. Priorität beim Softwaretest erklärt: klare Definitionen, eine Vier-Wege-Matrix mit Beispielen, Stufenskalen, wer die einzelnen Punkt…

Artikel lesen →
Datenbanken & SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Ein SQL-Unterabfrage-Tutorial mit Abfragen, die wir ausgeführt haben: Skalar-, IN-, FROM- und SELECT-Unterabfragen, korrelierte Unterabfragen, EXIST…

Artikel lesen →
Datenbanken & SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

SQL-Transaktionen und ACID anhand einer von uns durchgeführten Banküberweisung erklärt: COMMIT, ROLLBACK, Sicherungspunkte, Sperren, Isolationsstufe…

Artikel lesen →
Softwareentwicklung

Git merge vs rebase: Unterschiede, Beispiele und wann man was nutzt

Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.

Artikel lesen →
Softwareentwicklung

Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…

Artikel lesen →
Datenbanken & SQL

SQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)

SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…

Artikel lesen →