Rust API Integration

Hochperformante Schnittstelle zwischen Rust-Backend & Web-Frontend

Rust REST API JSON Parsing Multithreading WebAssembly

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.

API Request Eingabe

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.

Projekt Struktur

System-Architektur

Routing, Controller und Datenbank-Layer im Überblick.

Ausgabe der Wetterdaten

Ausgabe Berlin Ausgabe London Ausgabe Tokio

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 –