Fokus: Datenabruf und Verarbeitung über öffentliche API-Schnittstellen
Diese Webanwendung demonstriert ein klassisches Muster der modernen Webentwicklung: Eine clientseitige Applikation (Single Page Application) ruft dynamisch Daten von externen Diensten ab, verarbeitet diese im Browser und stellt sie dem Nutzer interaktiv dar. Der Kernprozess umfasst drei Schritte: Geocoding (Ort zu Koordinaten), Datenabfrage (Tankstellen-API) und clientseitiges Rendering (Sortierung/Filterung).
Die Anwendung verzichtet auf einen eigenen Backend-Server und nutzt
stattdessen direkt im Browser ausgeführtes JavaScript
(fetch API), um mit externen Diensten zu kommunizieren.
Da die Tankstellen-API geografische Koordinaten (Breiten- und Längengrad) benötigt, der Nutzer aber einen Ortsnamen (z. B. “Frankfurt am Main”) eingibt, muss eine Übersetzung stattfinden.
#stadt wird
URL-kodiert.https://nominatim.openstreetmap.org/search gesendet.lat (Latitude) und lon (Longitude)
enthält.javascript const geoResponse = await fetch(nominatimUrl, { headers: { 'User-Agent': 'Web-Spritpreis-Tool' } }); // Extraktion der Koordinaten aus dem JSON lat = parseFloat(geoData[0].lat); lon = parseFloat(geoData[0].lon);User-Agent Headers, um
Missbrauch zu verhindern.Mit den gewonnenen Koordinaten wird die eigentliche Preisabfrage durchgeführt.
lat & lng: Die zuvor ermittelten
Koordinaten.rad=5: Suchradius von 5 Kilometern.sort=dist: Vorsortierung nach Entfernung durch die
API.apikey: Ein statischer Schlüssel zur
Authentifizierung.fetch.tkData.ok).isOpen ist.javascript const tkUrl = `https://creativecommons.tankerkoenig.de/json/list.php?lat=${lat}&lng=${lon}&rad=5...`; const tkData = await tkResponse.json(); const offeneTankstellen = tkData.stations.filter(s => s.isOpen);Sobald die Rohdaten (JSON) vorliegen, übernimmt das JavaScript im Browser die gesamte weitere Logik. Es findet kein erneuter Serveraufruf statt.
findeBesten
iteriert durch das Array der Tankstellen, um den globalen Mindestpreis
für E5, E10 und Diesel zu ermitteln.e5_grenze, etc.)
verglichen. Bei Überschreitung wird visuelles Feedback (rote Markierung)
generiert.innerHTML in das #ergebnisse Div
eingefügt.Ein didaktisch wertvoller Aspekt dieses Codes ist die Implementierung der sortierbaren Tabelle ohne weiteren API-Aufruf.
currentStations im Arbeitsspeicher
des Browsers gehalten.currentStations kopiert
([...currentStations]) und mittels der JavaScript-Methode
.sort() neu geordnet.javascript const sortedStations = [...currentStations].sort((a, b) => { // Vergleichslogik basierend auf gewählter Spalte (kraftstoff) // und Richtung (sortAscending) });Für die Bewertung im akademischen Kontext sind folgende Punkte relevant:
const API_KEY = "...") sichtbar. In einer
Produktionsumgebung wäre dies ein Sicherheitsrisiko, da Dritte den Key
stehlen und das Kontingent ausschöpfen könnten. Für ein Lernprojekt oder
eine reine Demo ist dies jedoch akzeptabel.try...catch Blöcke, um Netzwerkfehler (z. B. keine
Internetverbindung) oder API-Fehler (Ort nicht gefunden) abzufangen und
dem Nutzer verständliche Meldungen im #status Div
anzuzeigen.async/await, was den Code lesbarer macht als die
traditionelle Nutzung von .then() Ketten (Promises).overflow-x: auto für Tabellen auf kleinen
Screens).Dieses Projekt illustriert exemplarisch, wie moderne Webanwendungen als “Thin Clients” fungieren können, die intelligente Datenverarbeitung von externen Spezialdiensten beziehen. Es verbindet Konzepte der asynchronen Kommunikation (HTTP/Fetch), der Datenstrukturierung (JSON/Arrays) und des dynamischen User Interface Managements (DOM Manipulation) in einer einzigen, lauffähigen HTML-Datei.