API Dokumentation¶
CharGraph API für STL-Generierung und Datenverarbeitung.
Übersicht¶
Die CharGraph API bietet Endpoints für: - STL-Datei-Generierung aus Pattern-Strings - 3D-Modell-Rendering mit OpenSCAD - Asynchrone Job-Verarbeitung
Base URL: https://chargraph.wieland.org/api
Endpoints¶
POST /api/generate¶
Generiert eine STL-Datei aus einem Pattern-String.
Request:
POST /api/generate HTTP/1.1
Content-Type: application/json
{
"pattern": "ES_IST_BALD...",
"filename": "my-wordclock"
}
Request Body:
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
pattern |
string | Ja | Grid-Pattern (110 Zeichen) |
filename |
string | Ja | Dateiname ohne Extension |
Response (Success):
{
"status": "success",
"job_id": "abc123",
"download_url": "/api/download/abc123.stl",
"processing_time": 12.5
}
Response (Error):
Status Codes:
200 OK- Erfolgreich generiert400 Bad Request- Ungültige Eingabe500 Internal Server Error- Server-Fehler503 Service Unavailable- Server überlastet
GET /api/download/:filename¶
Lädt eine generierte STL-Datei herunter.
Request:
Response:
Content-Type: application/sla
Content-Disposition: attachment; filename="my-wordclock.stl"
[STL Binary Data]
Status Codes:
200 OK- Datei gefunden404 Not Found- Datei existiert nicht410 Gone- Datei abgelaufen (nach 24h)
Verwendung¶
Mit JavaScript (Fetch API)¶
async function generateSTL(pattern, filename) {
const response = await fetch('https://chargraph.wieland.org/api/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ pattern, filename })
});
const data = await response.json();
if (data.status === 'success') {
// Download-Link öffnen
window.location.href = data.download_url;
} else {
console.error('Fehler:', data.message);
}
}
// Verwendung
const pattern = "ES_IST_BALD...";
generateSTL(pattern, "meine-uhr");
Mit Python¶
import requests
def generate_stl(pattern, filename):
url = 'https://chargraph.wieland.org/api/generate'
payload = {
'pattern': pattern,
'filename': filename
}
response = requests.post(url, json=payload)
data = response.json()
if data['status'] == 'success':
# Download
download_url = f"https://chargraph.wieland.org{data['download_url']}"
stl_response = requests.get(download_url)
with open(f'{filename}.stl', 'wb') as f:
f.write(stl_response.content)
print(f" STL gespeichert: {filename}.stl")
else:
print(f" Fehler: {data['message']}")
# Verwendung
pattern = "ES_IST_BALD..."
generate_stl(pattern, "meine-uhr")
Mit cURL¶
# STL generieren
curl -X POST https://chargraph.wieland.org/api/generate \
-H "Content-Type: application/json" \
-d '{"pattern":"ES_IST_BALD...","filename":"test"}' \
| jq .
# STL herunterladen
curl -O https://chargraph.wieland.org/api/download/test.stl
Rate Limits¶
- 10 Requests pro Minute pro IP
- 100 Requests pro Tag pro IP
Bei Überschreitung:
Pattern-Format¶
Anforderungen¶
- Länge: Exakt 110 Zeichen
- Zeichen: A-Z, Umlaute (Ä, Ö, Ü), Unterstrich (_)
- Format: 10 Zeilen × 11 Spalten
Beispiel¶
ES_IST_BALD
FÜNFZEHNVOR
NACHHALB___
ZWEI_EINS__
DREIVIERELF
FÜNFSECHS__
SIEBENZWÖLF
ZEHNNEUN___
ACHT_______
UHR________
Als String:
ES_IST_BALDFÜNFZEHNVORNACHHALB___ZWEI_EINS__DREIVIEREFFFÜNFSECHS__SIEBENZWÖLFZEHNNEUN___ACHT_______UHR________
Fehler-Codes¶
| Code | Beschreibung |
|---|---|
INVALID_PATTERN |
Pattern-String ungültig |
INVALID_LENGTH |
Pattern nicht 110 Zeichen |
INVALID_CHARS |
Ungültige Zeichen im Pattern |
INVALID_FILENAME |
Dateiname ungültig |
TIMEOUT |
Rendering-Timeout (>120s) |
OPENSCAD_ERROR |
OpenSCAD Fehler |
RATE_LIMIT |
Rate Limit überschritten |
Best Practices¶
1. Validierung vor API-Call¶
function validatePattern(pattern) {
if (pattern.length !== 110) {
return { valid: false, error: 'Länge muss 110 sein' };
}
if (!/^[A-ZÄÖÜ_]+$/.test(pattern)) {
return { valid: false, error: 'Ungültige Zeichen' };
}
return { valid: true };
}
2. Timeout handling¶
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 30000); // 30s
try {
const response = await fetch(url, {
signal: controller.signal,
...options
});
} catch (error) {
if (error.name === 'AbortError') {
console.error('Request timeout');
}
} finally {
clearTimeout(timeoutId);
}
3. Retry-Logik¶
async function generateWithRetry(pattern, filename, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await generateSTL(pattern, filename);
} catch (error) {
if (i === maxRetries - 1) throw error;
await new Promise(r => setTimeout(r, 1000 * (i + 1)));
}
}
}
Technische Details¶
OpenSCAD Rendering¶
Die API verwendet OpenSCAD für 3D-Rendering:
- Timeout: 120 Sekunden
- Font: WordclockFont2.ttf
- Ausgabe: Binary STL
- Größe: ~500 KB - 2 MB
Datei-Speicherung¶
- Speicherdauer: 24 Stunden
- Speicherort:
/var/lib/models/ - Automatische Löschung: Nach 24h
Support¶
Bei API-Problemen: - Prüfe Browser-Console für detaillierte Fehler - Teste mit cURL für Netzwerk-Probleme - Öffne ein GitHub Issue mit Request/Response
API Version: 1.0 Letzte Aktualisierung: Januar 2026