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.
- 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
- Der Benutzer sendet einen Benutzernamen und ein Passwort an den Anmeldeendpunkt.
- Der Server prüft sie und erstellt ein signiertes Token.
- Der Client speichert den Token.
- Jede spätere Anfrage enthält es, normalerweise in einem Header:
Authorization: Bearer <token>. - 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
expkönnen bei Diebstahl für immer funktionieren. issundaudwerden 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
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.
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.
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 →DevOpsErklä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 →SoftwareentwicklungAPI-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 →TestautomatisierungSpott 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 →SoftwaretestsCode-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 & SQLDELETE 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 & SQLErklä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 →SoftwareentwicklungTypeScript-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 →SoftwareentwicklungPython *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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsDocker-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 →TestautomatisierungTDD 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 →SoftwaretestsBenutzerakzeptanztests (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 & SQLErklä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 & SQLSQL 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 →SoftwareentwicklungWas 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 →SoftwareentwicklungErklä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 →SoftwareentwicklungErklä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 IntelligenzWas 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 →DevOpsBlau-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 →TestautomatisierungFlaky-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 →SoftwaretestsLasttest 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 →SoftwaretestsTestfall 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 & SQLSQL-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 & SQLSQL 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 →SoftwareentwicklungTutorial 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 →SoftwareentwicklungUmgang 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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsLinux-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 →SoftwareentwicklungGit 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 →SoftwareentwicklungPython 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 & SQLSQL 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 →