Rust API Integration
Hochperformante Schnittstelle zwischen Rust-Backend & Web-Frontend
Ziel dieses Projekts war es, die Geschwindigkeit und Sicherheit von Rust für Backend-Aufgaben zu nutzen. Anstatt auf interpretierte Sprachen zu setzen, kompiliert dieser Service zu nativem Maschinencode (WASM), was extrem niedrige Latenzen bei API-Calls ermöglicht.
Eingabe & Verarbeitung
Der Benutzer sendet eine Anfrage über eine definierte Schnittstelle. Die Rust-Anwendung nimmt diese entgegen, validiert die Eingabedaten und routet sie durch die interne Modulstruktur.
System-Architektur
Routing, Controller und Datenbank-Layer im Überblick.
Ausgabe der Wetterdaten
Live API-Antworten
Die API liefert Echtzeitdaten für verschiedene Städte weltweit, inklusive aktueller Temperatur, Windgeschwindigkeit, Luftfeuchtigkeit und Wetterlage.
Einblicke in den Code
1. Rust Backend & Datenstrukturen
Die zentrale Logik in Rust. Hier werden die JSON-Antworten der OpenWeatherMap API direkt in typ-sichere Rust-Structs deserialisiert.
use serde::{Deserialize, Serialize};
use wasm_bindgen::prelude::*;
use reqwest::Client;
#[derive(Deserialize, Serialize, Debug)]
pub struct WeatherResponse {
pub main: MainData,
pub weather: Vec<WeatherDetail>,
pub wind: WindData,
pub name: String,
}
#[wasm_bindgen]
pub async fn get_weather_data(city: String) -> Result<JsValue, JsValue> {
// ... API Aufruf ...
if response.status().is_success() {
let weather: WeatherResponse = response.json().await ... ;
Ok(serde_wasm_bindgen::to_value(&weather)?)
} else {
Err(JsValue::from_str("Stadt nicht gefunden"))
}
}
2. JavaScript / WASM Integration
Das kompilierte WASM-Modul wird im Frontend importiert. Die Rust-Funktion get_weather_data kann dann wie eine normale asynchrone JavaScript-Funktion aufgerufen werden.
import init, { get_weather_data } from './pkg/rust_hello.js';
async function start() {
await init(); // WASM initialisieren
const performSearch = async () => {
const city = input.value.trim();
try {
// Aufruf der Rust-Funktion
const data = await get_weather_data(city);
// DOM Updates mit den erhaltenen Daten
resultDiv.innerHTML = `
<div class="temp-display">${Math.round(data.main.temp)}°</div>
<b class="val-pink">${data.weather[0].description}</b>
`;
} catch (err) {
console.error(err);
}
};
}
3. Server & Build Status
Der lokale Server "dev-server" liefert die WASM-Binaries und Assets aus. Hier ein Blick in den Terminal-Output während der Entwicklung:
CMD: Serving HTTP on :: port 8000 (http://[::]:8000/) ... ::1 - - [16/Jan/2026 10:25:18] "GET / HTTP/1.1" 304 - ::1 - - [16/Jan/2026 10:25:18] "GET /pkg/rust_hello.js HTTP/1.1" 304 - ::1 - - [16/Jan/2026 10:25:18] "GET /pkg/rust_hello_bg.wasm HTTP/1.1" 304 - ::1 - - [16/Jan/2026 10:25:18] code 404, message File not found ::1 - - [16/Jan/2026 10:25:18] "GET /favicon.ico HTTP/1.1" 404 –