<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=APIs_verstehen_und_mit_KI-Agenten_verwenden</id>
	<title>APIs verstehen und mit KI-Agenten verwenden - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=APIs_verstehen_und_mit_KI-Agenten_verwenden"/>
	<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=APIs_verstehen_und_mit_KI-Agenten_verwenden&amp;action=history"/>
	<updated>2026-10-22T09:37:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MOOCsWiki Staging</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://staging.moocwiki.org/index.php?title=APIs_verstehen_und_mit_KI-Agenten_verwenden&amp;diff=72943&amp;oldid=prev</id>
		<title>Glanz: AI MOOC Plugin 3a178de04ab78102f0e2b7c17ae1cc43</title>
		<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=APIs_verstehen_und_mit_KI-Agenten_verwenden&amp;diff=72943&amp;oldid=prev"/>
		<updated>2026-10-22T03:36:46Z</updated>

		<summary type="html">&lt;p&gt;AI MOOC Plugin 3a178de04ab78102f0e2b7c17ae1cc43&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{T}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Einleitung =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zielgruppe:&amp;#039;&amp;#039;&amp;#039; Auszubildende im 1. bis 2. Ausbildungsjahr. &amp;#039;&amp;#039;&amp;#039;Voraussetzungen:&amp;#039;&amp;#039;&amp;#039; Dateien und Einheiten verstehen; Programmierkenntnisse sind nicht nötig. &amp;#039;&amp;#039;&amp;#039;Zeitbedarf:&amp;#039;&amp;#039;&amp;#039; etwa 5–7 Unterrichtseinheiten mit Wahlvertiefungen.&lt;br /&gt;
&lt;br /&gt;
Du erstellst ein &amp;#039;&amp;#039;&amp;#039;lesendes Lernprodukt&amp;#039;&amp;#039;&amp;#039;: einen kleinen Client, der synthetische Prüfwerte eines ungefährlichen Lehrbauteils ausschließlich von einem lokalen Testdienst abfragt. Am Ende zeigst du anhand eigener Tests, dass die Anwendung bei einer Zeitüberschreitung, beschädigtem JSON und wiederholten Fehlern kontrolliert reagiert. &amp;#039;&amp;#039;&amp;#039;Kein Maschinenzugang, keine reale Steuerung, keine Sicherheitsfreigabe.&amp;#039;&amp;#039;&amp;#039; Das Angebot ist unabhängig; es ist weder eine offizielle Liebherr-Schulung noch eine IHK-Zertifizierung.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aktivierung der Grundlage:&amp;#039;&amp;#039;&amp;#039; Der vorhandene Einstieg [https://moocwiki.org/index.php?curid=60654 MOOCwiki-Grundlage] wird hier nur kurz aufgegriffen: Dateien speichern, Zahlen und Einheiten unterscheiden, Eingaben und Ausgaben benennen. Der Seiteninhalt war zum Recherchezeitpunkt nicht zuverlässig abrufbar; deshalb behauptet dieser Kurs keine dortigen Einzelaussagen. Schätze vorab ein: Was ist eine Datei? Was unterscheidet 23,4 von 23,4 mm? Wie erkennst du einen Fehler?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dein Lernweg:&amp;#039;&amp;#039;&amp;#039; verstehen → angeleitet beobachten → lokal erproben → Fehler gezielt provozieren → selbstständig entscheiden und begründen. Alle Beispiele sind erfunden und offline mit lokal installierbarem Python oder auf Papier bearbeitbar; kein bezahltes KI-Konto erforderlich.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Schnittstellen, HTTP und REST lesen =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Eine API ist ein vereinbarter Datenweg ==&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; (Application Programming Interface, Programmierschnittstelle) legt fest, welche Daten oder Funktionen ein anderes Programm anfragen darf und wie die Antwort aussieht. Der &amp;#039;&amp;#039;&amp;#039;Client&amp;#039;&amp;#039;&amp;#039; fragt an; der &amp;#039;&amp;#039;&amp;#039;Server&amp;#039;&amp;#039;&amp;#039; beantwortet die Anfrage. Die &amp;#039;&amp;#039;&amp;#039;Schnittstellenbeschreibung&amp;#039;&amp;#039;&amp;#039; vereinbart Pfade, erlaubte Methoden, Felder, Einheiten und Fehlermeldungen. Eine KI kann beim Formulieren einer Anfrage helfen, aber sie kennt nicht automatisch den wirklichen Vertrag: Du prüfst jede Annahme gegen die Dokumentation.&lt;br /&gt;
&lt;br /&gt;
[[File:Client-server model.svg|500px|frameless|center|alt=Skizze: Client sendet Anfrage an Server und empfängt Antwort]]&lt;br /&gt;
&amp;#039;&amp;#039;Bild: Anfrage und Antwort im Client-Server-Modell; Lubaochuan, CC BY-SA 4.0. Ohne Bild: Der Client stellt eine Frage, der Server liefert Daten oder einen Fehler zurück.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Eine HTTP-Nachricht entschlüsseln ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HTTP&amp;#039;&amp;#039;&amp;#039; ist ein Kommunikationsprotokoll. Eine Anfrage enthält unter anderem &amp;#039;&amp;#039;&amp;#039;Methode&amp;#039;&amp;#039;&amp;#039; (beispielsweise GET), &amp;#039;&amp;#039;&amp;#039;Pfad&amp;#039;&amp;#039;&amp;#039; (beispielsweise /api/v1/werte), optionale &amp;#039;&amp;#039;&amp;#039;Header&amp;#039;&amp;#039;&amp;#039; und manchmal einen &amp;#039;&amp;#039;&amp;#039;Body&amp;#039;&amp;#039;&amp;#039; (Inhalt). Eine Antwort besteht aus &amp;#039;&amp;#039;&amp;#039;Statuscode&amp;#039;&amp;#039;&amp;#039;, Headern und gegebenenfalls einem Body. &amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; ist für lesende Abfragen vorgesehen; &amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; übermittelt typischerweise neue Daten zur Verarbeitung. Unsere Schulübung verwendet nur GET.&lt;br /&gt;
&lt;br /&gt;
Beispiel aus dem lokalen, erfundenen Dienst:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /api/v1/werte HTTP/1.1&lt;br /&gt;
Host: 127.0.0.1:8765&lt;br /&gt;
Accept: application/json&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;bauteil&amp;quot;:&amp;quot;LEHR-01&amp;quot;,&amp;quot;wert&amp;quot;:23.4,&amp;quot;einheit&amp;quot;:&amp;quot;mm&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;127.0.0.1&amp;#039;&amp;#039;&amp;#039; bezeichnet den eigenen Rechner (Loopback); &amp;#039;&amp;#039;&amp;#039;Port 8765&amp;#039;&amp;#039;&amp;#039; ist eine lokale Anschlussnummer. &amp;#039;&amp;#039;&amp;#039;200&amp;#039;&amp;#039;&amp;#039; bedeutet erfolgreiche Bearbeitung, &amp;#039;&amp;#039;&amp;#039;404&amp;#039;&amp;#039;&amp;#039; nicht gefunden, &amp;#039;&amp;#039;&amp;#039;503&amp;#039;&amp;#039;&amp;#039; vorübergehend nicht verfügbar. &amp;#039;&amp;#039;&amp;#039;408&amp;#039;&amp;#039;&amp;#039; ist ein HTTP-Status, während eine lokale Client-Zeitüberschreitung auch ohne HTTP-Antwort entstehen kann. Verwechsle diese beiden Fehler nicht.&lt;br /&gt;
&lt;br /&gt;
[[File:HTTP-Anfrage.svg|500px|frameless|center|alt=Beschriftete Beispielansicht einer HTTP-Anfrage und ihrer Antwort]]&lt;br /&gt;
&amp;#039;&amp;#039;Bild: Bestandteile einer HTTP-Anfrage und Antwort; Sébastien Santoro/Dereckson und Kulandru mor, gemeinfrei. Ohne Bild: Methode und Pfad stehen in der Anfrage, Status und Inhalt in der Antwort.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== REST: Ressourcen statt magische Befehle ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;REST&amp;#039;&amp;#039;&amp;#039; ist ein Architekturstil für verteilte Systeme, kein eigenes Datenformat. Eine &amp;#039;&amp;#039;&amp;#039;Ressource&amp;#039;&amp;#039;&amp;#039; ist über eine Adresse erreichbar; eine &amp;#039;&amp;#039;&amp;#039;Repräsentation&amp;#039;&amp;#039;&amp;#039; beschreibt sie. REST strebt unter anderem eine einheitliche Schnittstelle und zustandslose Interaktionen an. Nicht jede HTTP-API erfüllt alle REST-Bedingungen. Unsere einfache Übungs-API orientiert sich an REST: GET /api/v1/werte liefert Messwerte; eine alternative Rückgabe kann einen Fehlerstatus besitzen. &amp;#039;&amp;#039;&amp;#039;Version v1&amp;#039;&amp;#039;&amp;#039; im Pfad kennzeichnet hier eine vereinbarte Schnittstellenversion, keine allgemeine Pflicht.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mini-Kontrolle:&amp;#039;&amp;#039;&amp;#039; Markiere im Beispiel die Methode, den Pfad, den Statuscode und die Einheit. Erkläre einem Lernpartner, warum eine GET-Abfrage keine Maschine starten darf.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Strukturierte Daten und sichere Abfragen =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== JSON verstehen und prüfen ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JSON&amp;#039;&amp;#039;&amp;#039; (JavaScript Object Notation) ist ein textbasiertes Format für strukturierte Daten. Ein Objekt verwendet Schlüssel und Werte; Texte stehen in doppelten Anführungszeichen, Zahlen nicht. Eine Liste steht in eckigen Klammern. JSON ist nur ein Format, kein Beweis für die Richtigkeit eines Messwerts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;bauteil&amp;quot;: &amp;quot;LEHR-01&amp;quot;,&lt;br /&gt;
  &amp;quot;wert&amp;quot;: 23.4,&lt;br /&gt;
  &amp;quot;einheit&amp;quot;: &amp;quot;mm&amp;quot;,&lt;br /&gt;
  &amp;quot;status&amp;quot;: &amp;quot;synthetisch&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Prüfe in dieser Reihenfolge: (1) Ist die Antwort erfolgreich? (2) Ist sie syntaktisch gültiges JSON? (3) Sind erwartete Felder vorhanden und haben sie den richtigen Typ? (4) Ist die Einheit erlaubt? (5) Ist der Wert plausibel? &amp;#039;&amp;#039;&amp;#039;Syntaxprüfung&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;Fachprüfung&amp;#039;&amp;#039;&amp;#039; sind verschiedene Schritte: Der Text {&amp;quot;wert&amp;quot;:&amp;quot;viel&amp;quot;} kann formal gültiges JSON sein, obwohl er keinen verwendbaren Zahlenwert enthält.&lt;br /&gt;
&lt;br /&gt;
[[File:Web API diagram.svg|430px|frameless|center|alt=Web-API-Skizze: Anfragender Client, Server und Antwort im JSON-Format]]&lt;br /&gt;
&amp;#039;&amp;#039;Bild: Web-API überträgt strukturierte Antwort; I.hate.spam.mail.here, CC0 1.0. Ohne Bild: Der Server gibt nach einer Anfrage ein JSON-Objekt an den Client zurück.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[File:JSON vector logo.svg|180px|frameless|center|alt=Schwarz-graues JSON-Logo als visuelles Erkennungszeichen]]&lt;br /&gt;
&amp;#039;&amp;#039;Bild: JSON-Wortbildmarke, Douglas Crockford zugeschrieben, einfache Formen als gemeinfrei gekennzeichnet; Logo ist keine Qualitätsgarantie.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Sicherheit begrenzt die Befugnis des Clients ==&lt;br /&gt;
Der Lehr-Client darf nur einen festen lokalen Host und die im Unterricht freigegebenen &amp;#039;&amp;#039;&amp;#039;GET-Endpunkte&amp;#039;&amp;#039;&amp;#039; ansprechen. Das ist &amp;#039;&amp;#039;&amp;#039;Allowlisting&amp;#039;&amp;#039;&amp;#039;: Nur vorher festgelegte Ziele sind erlaubt. Nutze synthetische Werte, keine realen Zugangsdaten oder personenbezogenen Messdaten. Prüfe auch bei vermeintlich vertrauenswürdigen KI-Ausgaben Pfad, Methode, erlaubte Aktion, Datentypen und Folgen. Eine KI kann irrtümlich einen Schreibaufruf vorschlagen, ohne dafür befugt zu sein.&lt;br /&gt;
&lt;br /&gt;
Für echte externe Dienste wären unter anderem angemessene Authentifizierung, Transportverschlüsselung, Berechtigungen, Datenminimierung und Protokollierung zu prüfen; diese lokale Übung benötigt keine Tokens. &amp;#039;&amp;#039;&amp;#039;MCP&amp;#039;&amp;#039;&amp;#039; kann KI-Anwendungen mit Werkzeugen verbinden; dabei gelten zusätzliche Risiken wie übertragene Berechtigungen, Angriffe auf lokale Dienste und unzulässige Weiterleitung von Tokens. Dieser Kurs benutzt MCP nur als &amp;#039;&amp;#039;&amp;#039;Recherche- und Reflexionsthema&amp;#039;&amp;#039;&amp;#039;, nicht als Verbindung zu Maschinen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Medieneinstieg mit Alternative ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Deutschsprachiges Lernvideo zu JSON:&amp;#039;&amp;#039;&amp;#039; {{#ev:youtube|https://www.youtube.com/watch?v=BUFN0WMVW3k|500|center}}&lt;br /&gt;
&amp;#039;&amp;#039;Programmieren Starten, „Was ist JSON? Einfach und schnell erklärt!“, veröffentlicht 18.11.2019. Die Metadaten sind recherchiert; eine durchgehende Wiedergabe konnte nicht unabhängig getestet werden. Rechte am Video verbleiben beim Urheber; keine OER-Lizenz behauptet. Alternative ohne Video: Lies die beiden JSON-Beispiele, unterstreiche Schlüssel und markiere Zahlenwerte.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Geführter Modellfall: Lokaler Messdaten-Testdienst =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Die Lernaufgabe und der Vertrag ==&lt;br /&gt;
Ein rein erfundenes Kunststoff-Lehrbauteil trägt die Kennung LEHR-01. Sein synthetischer Testwert beträgt 23,4 mm; er darf niemals mit einem realen Prüfprotokoll verwechselt werden. Du arbeitest ausschließlich auf deinem eigenen Computer. Ein bereits eingerichteter lokaler Dienst kann mit vier GET-Pfaden antworten:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Lokaler Pfad !! Erwartete Antwort !! Geplanter Test&lt;br /&gt;
|-&lt;br /&gt;
| /api/v1/werte || Status 200, gültiges JSON mit 23,4 mm || Normalfall&lt;br /&gt;
|-&lt;br /&gt;
| /api/v1/ungueltig || Status 200, beschädigter JSON-Text || Parsingfehler&lt;br /&gt;
|-&lt;br /&gt;
| /api/v1/langsam || Antwort nach 2 Sekunden || Timeout bei Limit 1 Sekunde&lt;br /&gt;
|-&lt;br /&gt;
| /api/v1/nichtbereit || Status 503 || Vorübergehend nicht verfügbar&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lehrvertrag v1:&amp;#039;&amp;#039;&amp;#039; Der Client kennt ausschließlich den Host 127.0.0.1 und Port 8765, fordert die oben definierten Daten über GET an, nutzt ein Zeitlimit von 1 Sekunde, wiederholt nur begrenzt und meldet jeden Abbruch. Ein Status 200 allein gilt nicht als fachlicher Erfolg. Der sichtbare Messwert ist niemals eine Freigabe.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Schrittfolge ohne Programmierkenntnisse ==&lt;br /&gt;
# [[Anforderung]]: Zeichne vier Kästchen: Client → GET-Anfrage → lokaler Dienst → Antwort. Beschrifte den erlaubten Datenfluss.&lt;br /&gt;
# [[Datensatz]]: Schreibe drei Spalten auf: Feld, Typ, erwartete Bedeutung. Beispiel „wert – Zahl – synthetische Länge“.&lt;br /&gt;
# [[Testfall]]: Ziehe für jeden Pfad eine Karte. Notiere vorher erwartete Reaktion und danach beobachtete Reaktion. Ohne Computer darfst du vorgegebene Antwortkarten verwenden.&lt;br /&gt;
# [[Fehlerbehandlung]]: Schreibe einen Wenn-dann-Satz je Fall: Bei Timeout abbrechen oder nur begrenzt erneut lesen; bei defektem JSON keine Zahl ausgeben; bei wiederholtem 503 endgültig stoppen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Optional: Lokalen Testdienst selbst starten ==&lt;br /&gt;
Wenn Python 3 bereits auf dem Schulrechner installiert ist, speichere folgenden &amp;#039;&amp;#039;&amp;#039;öffentlichen Lehrbeispielcode ohne Echtdaten&amp;#039;&amp;#039;&amp;#039; als dienst.py. Er verwendet nur die Python-Standardbibliothek. Eine Lehrkraft kann ihn vorher freigeben; andernfalls bleiben die Kartenübungen vollständig nutzbar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer&lt;br /&gt;
import json&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
class Dienst(BaseHTTPRequestHandler):&lt;br /&gt;
    def do_GET(self):&lt;br /&gt;
        if self.path == &amp;quot;/api/v1/langsam&amp;quot;:&lt;br /&gt;
            time.sleep(2)&lt;br /&gt;
        if self.path == &amp;quot;/api/v1/nichtbereit&amp;quot;:&lt;br /&gt;
            status, body = 503, b&amp;#039;{&amp;quot;fehler&amp;quot;:&amp;quot;nicht bereit&amp;quot;}&amp;#039;&lt;br /&gt;
        elif self.path == &amp;quot;/api/v1/ungueltig&amp;quot;:&lt;br /&gt;
            status, body = 200, b&amp;#039;{&amp;quot;wert&amp;quot;:23.4,&amp;#039;&lt;br /&gt;
        elif self.path in (&amp;quot;/api/v1/werte&amp;quot;, &amp;quot;/api/v1/langsam&amp;quot;):&lt;br /&gt;
            status = 200&lt;br /&gt;
            body = json.dumps({&lt;br /&gt;
                &amp;quot;bauteil&amp;quot;: &amp;quot;LEHR-01&amp;quot;, &amp;quot;wert&amp;quot;: 23.4,&lt;br /&gt;
                &amp;quot;einheit&amp;quot;: &amp;quot;mm&amp;quot;, &amp;quot;status&amp;quot;: &amp;quot;synthetisch&amp;quot;&lt;br /&gt;
            }).encode(&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            status, body = 404, b&amp;#039;{&amp;quot;fehler&amp;quot;:&amp;quot;unbekannt&amp;quot;}&amp;#039;&lt;br /&gt;
        try:&lt;br /&gt;
            self.send_response(status)&lt;br /&gt;
            self.send_header(&amp;quot;Content-Type&amp;quot;, &amp;quot;application/json&amp;quot;)&lt;br /&gt;
            self.send_header(&amp;quot;Content-Length&amp;quot;, str(len(body)))&lt;br /&gt;
            self.end_headers()&lt;br /&gt;
            self.wfile.write(body)&lt;br /&gt;
        except (BrokenPipeError, ConnectionResetError):&lt;br /&gt;
            pass&lt;br /&gt;
&lt;br /&gt;
ThreadingHTTPServer((&amp;quot;127.0.0.1&amp;quot;, 8765), Dienst).serve_forever()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starte ihn lokal mit „python dienst.py“ beziehungsweise „python3 dienst.py“ und halte das Terminal geöffnet. Der Dienst ist nur an die Loopback-Adresse gebunden und implementiert keine POST-, PUT- oder DELETE-Funktion. Beende ihn mit Strg+C. &amp;#039;&amp;#039;&amp;#039;Wichtig:&amp;#039;&amp;#039;&amp;#039; Vor dem Start fremder Codes gelten lokale Schul- und IT-Regeln; kein externer Server ist Teil dieser Aufgabe.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Prüfprotokoll mit konkreten Erwartungen ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fall !! Erwartung !! Warum?&lt;br /&gt;
|-&lt;br /&gt;
| Normalfall || 200 + JSON + Zahl 23,4 mm; als „synthetisch“ markieren || Transport, Struktur und fachliches Schema passen&lt;br /&gt;
|-&lt;br /&gt;
| Timeout || Nach höchstens etwa 1 s pro Versuch kontrollierter Fehler; maximal zwei Versuche || Ein Hänger blockiert die App nicht unbegrenzt&lt;br /&gt;
|-&lt;br /&gt;
| Ungültiges JSON || Parsingfehler melden, keine Zahl anzeigen, nicht blind wiederholen || Eine Wiederholung repariert keine sicher bekannte Formatverletzung&lt;br /&gt;
|-&lt;br /&gt;
| Dauerhaft 503 || Maximal zwei Leseversuche, dann „Dienst nicht bereit“ || Begrenzte Wiederholung schont Ressourcen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die gemessene Gesamtdauer kann geringfügig über der Summe der Zeitlimits liegen, weil Planung, Rückgabe und Pausen Zeit benötigen. Ein Zeitlimit gilt für die jeweiligen Netzoperationen, nicht automatisch als harte Gesamtdauer aller Arbeitsschritte.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lesenden Client entwickeln und testen =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Drei Fehlerregeln statt endloser Versuche ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Timeout:&amp;#039;&amp;#039;&amp;#039; Der Client wartet nicht grenzenlos. &amp;#039;&amp;#039;&amp;#039;Ungültiges JSON:&amp;#039;&amp;#039;&amp;#039; Der Client darf trotz HTTP 200 keine Messzahl erfinden und muss den Unterschied zwischen erfolgreichem Transport und fehlerhaftem Inhalt zeigen. &amp;#039;&amp;#039;&amp;#039;Wiederholungsgrenze:&amp;#039;&amp;#039;&amp;#039; Wiederhole bei dieser Leseschnittstelle höchstens &amp;#039;&amp;#039;&amp;#039;einmal&amp;#039;&amp;#039;&amp;#039; nach dem ersten fehlgeschlagenen Versuch, also insgesamt höchstens &amp;#039;&amp;#039;&amp;#039;zwei Versuche&amp;#039;&amp;#039;&amp;#039;. Wiederhole nur festgelegte vorübergehende Fehler (Zeitüberschreitung oder 503); nicht 404, nicht beschädigtes JSON und nicht Schemafehler. In produktiven Anwendungen kommen Backoff, Jitter, serverseitige Hinweise, Idempotenz und Gesamtbudgets hinzu. Die hier gezeigte kurze Pause ist eine didaktische Vereinfachung, keine universelle Wiederholungsstrategie.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Optional: Ein ausführbarer Python-Client ==&lt;br /&gt;
Speichere als client.py. Der erlaubte Pfad wird intern aus einer festen Auswahl gewählt. Nutze zum Wechseln zwischen den vier Fällen ausschließlich die Variable FALL. Der Code hat keine Schnittstelle für eine frei von KI eingegebene Adresse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import json&lt;br /&gt;
import math&lt;br /&gt;
import socket&lt;br /&gt;
import time&lt;br /&gt;
import urllib.error&lt;br /&gt;
import urllib.request&lt;br /&gt;
&lt;br /&gt;
PFADE = {&lt;br /&gt;
    &amp;quot;normal&amp;quot;: &amp;quot;/api/v1/werte&amp;quot;,&lt;br /&gt;
    &amp;quot;timeout&amp;quot;: &amp;quot;/api/v1/langsam&amp;quot;,&lt;br /&gt;
    &amp;quot;json&amp;quot;: &amp;quot;/api/v1/ungueltig&amp;quot;,&lt;br /&gt;
    &amp;quot;dienst&amp;quot;: &amp;quot;/api/v1/nichtbereit&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
FALL = &amp;quot;normal&amp;quot;&lt;br /&gt;
URL = &amp;quot;http://127.0.0.1:8765&amp;quot; + PFADE[FALL]&lt;br /&gt;
MAX_VERSUCHE = 2&lt;br /&gt;
&lt;br /&gt;
for versuch in range(1, MAX_VERSUCHE + 1):&lt;br /&gt;
    try:&lt;br /&gt;
        anfrage = urllib.request.Request(&lt;br /&gt;
            URL, method=&amp;quot;GET&amp;quot;,&lt;br /&gt;
            headers={&amp;quot;Accept&amp;quot;: &amp;quot;application/json&amp;quot;}&lt;br /&gt;
        )&lt;br /&gt;
        with urllib.request.urlopen(anfrage, timeout=1.0) as r:&lt;br /&gt;
            roh = r.read(4096)&lt;br /&gt;
            if r.read(1):&lt;br /&gt;
                raise ValueError(&amp;quot;Antwort zu gross&amp;quot;)&lt;br /&gt;
        daten = json.loads(roh.decode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
        if not isinstance(daten, dict):&lt;br /&gt;
            raise ValueError(&amp;quot;JSON-Objekt erwartet&amp;quot;)&lt;br /&gt;
        wert = daten.get(&amp;quot;wert&amp;quot;)&lt;br /&gt;
        if (type(wert) not in (int, float)&lt;br /&gt;
                or not math.isfinite(wert)&lt;br /&gt;
                or daten.get(&amp;quot;einheit&amp;quot;) != &amp;quot;mm&amp;quot;&lt;br /&gt;
                or daten.get(&amp;quot;status&amp;quot;) != &amp;quot;synthetisch&amp;quot;&lt;br /&gt;
                or daten.get(&amp;quot;bauteil&amp;quot;) != &amp;quot;LEHR-01&amp;quot;):&lt;br /&gt;
            raise ValueError(&amp;quot;Unpassendes Datenschema&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Synthetischer Lehrwert:&amp;quot;, wert, &amp;quot;mm&amp;quot;)&lt;br /&gt;
        break&lt;br /&gt;
    except json.JSONDecodeError:&lt;br /&gt;
        print(&amp;quot;STOPP: Ungueltiges JSON, keine Zahl ausgeben&amp;quot;)&lt;br /&gt;
        break&lt;br /&gt;
    except (UnicodeDecodeError, ValueError) as fehler:&lt;br /&gt;
        print(&amp;quot;STOPP: Inhalt ungueltig:&amp;quot;, fehler)&lt;br /&gt;
        break&lt;br /&gt;
    except urllib.error.HTTPError as fehler:&lt;br /&gt;
        if fehler.code != 503 or versuch == MAX_VERSUCHE:&lt;br /&gt;
            print(&amp;quot;STOPP: HTTP-Status&amp;quot;, fehler.code)&lt;br /&gt;
            break&lt;br /&gt;
        print(&amp;quot;Dienst 503; ein begrenzter neuer Versuch&amp;quot;)&lt;br /&gt;
    except (urllib.error.URLError, TimeoutError,&lt;br /&gt;
            socket.timeout) as fehler:&lt;br /&gt;
        if versuch == MAX_VERSUCHE:&lt;br /&gt;
            print(&amp;quot;STOPP: Verbindung/Zeitlimit:&amp;quot;, fehler)&lt;br /&gt;
            break&lt;br /&gt;
        print(&amp;quot;Zeit-/Verbindungsfehler; letzter Versuch&amp;quot;)&lt;br /&gt;
    if versuch &amp;lt; MAX_VERSUCHE:&lt;br /&gt;
        time.sleep(0.2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ablauf:&amp;#039;&amp;#039;&amp;#039; Starte erst dienst.py, dann client.py. Teste nacheinander FALL = &amp;quot;normal&amp;quot;, &amp;quot;timeout&amp;quot;, &amp;quot;json&amp;quot; und &amp;quot;dienst&amp;quot;. Trage je Test ein: angefragter Pfad, beobachteter Status beziehungsweise Fehlertyp, Anzahl Versuche, Endmeldung. In einfachen Python-Versionen kann die genaue Ausnahme bei Netzfehlern variieren; wichtig sind &amp;#039;&amp;#039;&amp;#039;begrenzter Abbruch und kein erfundener Messwert&amp;#039;&amp;#039;&amp;#039;. Der Code setzt Python 3 mit Standardbibliothek voraus, nutzt keine externe KI und sendet nichts ins Internet. Auch eine erfolgreiche Demonstration ist kein Sicherheitstest für Maschinen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== KI-Agenten als überprüfbare Helfer ==&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;KI-Agent&amp;#039;&amp;#039;&amp;#039; ist hier ein assistierendes System, das Text oder Vorschläge für mehrere Arbeitsschritte erzeugen kann. Du darfst den folgenden Auftrag auch als Rollenspiel ohne KI bearbeiten: „Lies nur Daten aus der lokalen Lehr-API. Schlage GET-Anfragen, erwartete Statuscodes und drei Fehlerfälle vor. Fordere keine Schlüssel an, öffne keine fremden Hosts, nutze keinen Schreibzugriff. Kennzeichne Unsicherheiten.“&lt;br /&gt;
&lt;br /&gt;
Prüfe einen Vorschlag mit &amp;#039;&amp;#039;&amp;#039;fünf Leitfragen&amp;#039;&amp;#039;&amp;#039;: Stimmt der Endpunkt? Ist die Methode nur lesend? Sind Felder und Einheiten vereinbart? Sind Timeout, beschädigtes JSON und Versuchszahl berücksichtigt? Wer trägt die Verantwortung für die Entscheidung? Ein KI-Text ist &amp;#039;&amp;#039;&amp;#039;kein&amp;#039;&amp;#039;&amp;#039; Beleg, dass der Dienst so funktioniert. Die tatsächliche lokale Beobachtung und das Prüfprotokoll haben Vorrang. Die eigene Begründung darf nicht an den Agenten delegiert werden.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Fehler begründen und auf neue Aufgaben übertragen =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Diagnose mit Entscheidungen ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fall A:&amp;#039;&amp;#039;&amp;#039; Der Server antwortet nach zwei Sekunden. Bei clientseitigem Zeitlimit von einer Sekunde entstehen zwei begrenzte Fehlschläge. Gute Entscheidung: keine scheinbar gültige Messzahl anzeigen; den Abbruch dokumentieren. &amp;#039;&amp;#039;&amp;#039;Fall B:&amp;#039;&amp;#039;&amp;#039; HTTP 200, aber Body endet mitten in einer JSON-Struktur. Gute Entscheidung: als Formatfehler markieren und nicht so tun, als sei der Wert 23,4 bestätigt. &amp;#039;&amp;#039;&amp;#039;Fall C:&amp;#039;&amp;#039;&amp;#039; Beide Versuche liefern 503. Gute Entscheidung: stoppen statt eine dritte Anfrage zu schicken. &amp;#039;&amp;#039;&amp;#039;Fall D:&amp;#039;&amp;#039;&amp;#039; HTTP 200 und gültiges JSON, aber Einheit „kg“ statt „mm“. Gute Entscheidung: Schemaprüfung verweigert die Ausgabe eines Längenwerts.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Transferauftrag: Eine robuste Schnittstelle ohne Maschinenzugang ==&lt;br /&gt;
Stelle dir vor, ein Betrieb möchte später verschiedene Prüfwertdateien in eine lokale Trainings-App einlesen. Entwickle einen &amp;#039;&amp;#039;&amp;#039;reinen Lesevertrag&amp;#039;&amp;#039;&amp;#039;: zulässige Routen, dokumentierte Einheit, Status- und Fehlerfälle, maximale Antwortgröße, Timeout, Wiederholungsregel, Testnachweis und bewusst ausgeschlossene Schreibaktionen. Entscheide, warum eine konkrete neue Anforderung freigegeben oder zurückgestellt wird. Schon wenn eine KI einen Befehl wie „schalte die Maschine frei“ formuliert, ist die richtige Reaktion: &amp;#039;&amp;#039;&amp;#039;nicht ausführen, Kompetenzgrenze erklären und fachliche Zuständigkeit klären&amp;#039;&amp;#039;&amp;#039;. Kein Kursbeispiel ersetzt betriebliche Freigabe, Qualifizierung oder eine Risikobeurteilung.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vertiefung:&amp;#039;&amp;#039;&amp;#039; Unterscheide einen 429-Status (zu viele Anfragen), einen lokalen Timeout und einen 503-Status. Berücksichtige, dass Wiederholung von verändernden Anfragen Nebenwirkungen haben kann; das Lehrbeispiel beschränkt sich daher absichtlich auf GET. Denke über Validierung, Protokoll ohne Geheimnisse, zusätzliche Obergrenzen und unsichere Agentenwerkzeuge nach.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Interaktive Aufgaben =&lt;br /&gt;
&lt;br /&gt;
Bei den Multiple-Choice-Aufgaben liefert das Quizmodul nach deiner Auswahl Rückmeldung. Die jeweils richtige Antwort ist in der Lernansicht nicht als vorausgefüllte Lösung auszugeben.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Quiz: Schnittstellen sicher verstehen ==&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was beschreibt eine API am treffendsten?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Eine vereinbarte Schnittstelle für Daten und Funktionen)&lt;br /&gt;
(!Eine beliebige Datei ohne Regeln)&lt;br /&gt;
(!Eine dauerhafte Netzwerkverbindung ohne Antworten)&lt;br /&gt;
(!Eine Sicherheitsfreigabe für eine Maschine)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche HTTP-Methode nutzt der lokale Lehr-Client ausschließlich?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(GET)&lt;br /&gt;
(!DELETE)&lt;br /&gt;
(!PUT)&lt;br /&gt;
(!POST)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Aussage trifft auf den Status 200 zu?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Die HTTP-Anfrage wurde erfolgreich bearbeitet)&lt;br /&gt;
(!Alle fachlichen Messwerte sind garantiert korrekt)&lt;br /&gt;
(!Der Client hat automatisch eine Maschinenfreigabe)&lt;br /&gt;
(!Jedes JSON-Feld ist garantiert vorhanden)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Woran erkennst du syntaktisch fehlerhaftes JSON?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Eine notwendige schliessende Klammer fehlt)&lt;br /&gt;
(!Ein gueltiger Zahlenwert kommt vor)&lt;br /&gt;
(!Ein Objektschluessel enthaelt Text)&lt;br /&gt;
(!Die Einheit wird als Zeichenkette geschrieben)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warum prüft der Client eine Einheit?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Damit ein Zahlenwert fachlich richtig eingeordnet wird)&lt;br /&gt;
(!Damit der HTTP-Status automatisch auf 200 springt)&lt;br /&gt;
(!Damit er das Internet ohne Erlaubnis nutzen darf)&lt;br /&gt;
(!Damit jede Wiederholung erfolgreich wird)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was bedeutet eine lokale Zeitüberschreitung?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Der Client erhielt in der festgelegten Wartezeit kein ausreichendes Ergebnis)&lt;br /&gt;
(!Der Server hat zwingend den HTTP-Code 408 geschickt)&lt;br /&gt;
(!Das JSON ist sicher syntaktisch falsch)&lt;br /&gt;
(!Der gelesene Zahlenwert muss null sein)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wie viele Versuche erlaubt der Lehr-Client insgesamt?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Zwei)&lt;br /&gt;
(!Unbegrenzt viele)&lt;br /&gt;
(!Mindestens zehn)&lt;br /&gt;
(!Immer genau fuenf)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was soll der Client bei beschädigtem JSON tun?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Fehler melden und keinen scheinbar gueltigen Wert anzeigen)&lt;br /&gt;
(!Fehlende Zeichen frei erfinden)&lt;br /&gt;
(!Den Inhalt als Maschinenfreigabe bewerten)&lt;br /&gt;
(!Jede Anfrage unendlich oft wiederholen)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Maßnahme begrenzt das Ziel einer Agentenabfrage?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Eine feste Liste erlaubter lokaler Pfade)&lt;br /&gt;
(!Eine beliebige vom Agenten erfundene Internetadresse)&lt;br /&gt;
(!Das Abschalten der Datentyppruefung)&lt;br /&gt;
(!Die Freigabe aller HTTP-Methoden)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welcher Transfer bleibt innerhalb des Kursrahmens?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Einen lesenden Testvertrag mit synthetischen Daten pruefen)&lt;br /&gt;
(!Einen echten Antrieb direkt ansteuern)&lt;br /&gt;
(!Eine betriebliche Sicherheitsfreigabe automatisch ausstellen)&lt;br /&gt;
(!Echte geheime Zugangsdaten in einen Prompt kopieren)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Memory: Begriffe und Erklärungen ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;memo-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| API || Vereinbarter Zugang zwischen Programmen&lt;br /&gt;
|-&lt;br /&gt;
| Endpunkt || Adresse einer konkreten Schnittstellenoperation&lt;br /&gt;
|-&lt;br /&gt;
| Header || Zusatzinformationen einer HTTP-Nachricht&lt;br /&gt;
|-&lt;br /&gt;
| JSON || Textformat strukturierter Daten&lt;br /&gt;
|-&lt;br /&gt;
| Timeout || Erreichen einer festgelegten Wartegrenze&lt;br /&gt;
|-&lt;br /&gt;
| Allowlist || Vorher bestimmte erlaubte Ziele&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Drag and Drop: Fehler und Reaktion ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;lueckentext-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ordne die passende Reaktion zu.&lt;br /&gt;
! Beobachtung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Keine Zahl ausgeben&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Beschädigte JSON-Antwort&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Wartezeit begrenzen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Sehr langsamer lokaler Dienst&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Nach zwei Versuchen stoppen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Wiederholt vorübergehend nicht bereit&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einheit zurückweisen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Kilogramm statt Millimeter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Nur lokale Pfade zulassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Agent schlägt fremden Server vor&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Kreuzworträtsel: API-Fachwörter ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;kreuzwort-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Client || Welches Programm startet die Abfrage?&lt;br /&gt;
|-&lt;br /&gt;
| Server || Welches Programm beantwortet die Anfrage?&lt;br /&gt;
|-&lt;br /&gt;
| Methode || Wie heißt das Anfragefeld für GET oder POST?&lt;br /&gt;
|-&lt;br /&gt;
| Header || Wie nennt man HTTP-Zusatzinformationen?&lt;br /&gt;
|-&lt;br /&gt;
| Timeout || Welcher Begriff steht für eine erreichte Wartegrenze?&lt;br /&gt;
|-&lt;br /&gt;
| Schema || Welche Beschreibung legt Felder und erwartete Typen fest?&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== LearningApps: Weitere Zuordnungen ==&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://learningapps.org/index.php?s=APIs+verstehen+und+mit+KI-Agenten+verwenden &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Du kannst dort nach passenden Übungen suchen; einzelne Suchtreffer sind nicht vorab didaktisch oder rechtlich geprüft. Offline-Alternative: Nutze die Memory- und Drag-and-Drop-Paare dieser Seite als Papierkarten.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Lückentext: Sichere Abfragen ==&lt;br /&gt;
&amp;lt;quiz display=simple&amp;gt;&lt;br /&gt;
{&amp;#039;&amp;#039;&amp;#039;Setze die Fachbegriffe passend ein.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
|type=&amp;quot;{}&amp;quot;}&lt;br /&gt;
Ein Programm, das Daten anfordert, heißt { Client }. Ein Dienst, der sie bereitstellt, heißt { Server }. Für unsere ausschließlich lesende Anfrage verwenden wir { GET }. Der HTTP-Erfolgscode unseres Normalfalls ist { 200 }. Strukturierte Daten des Testdienstes sind im Format { JSON }. Ein begrenztes Warten heißt { Timeout }. Ein fehlendes Zeichen kann einen { Syntaxfehler } verursachen. Eine fachliche Prüfung kontrolliert auch die { Einheit }. Die festgelegte Obergrenze verhindert endlose { Wiederholungen }. Ohne Maschinenzugang bleibt das Ergebnis eine reine { Simulation }.&lt;br /&gt;
&amp;lt;/quiz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Offene Aufgaben =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Leicht ===&lt;br /&gt;
# [[Client-Server-Modell]]: Zeichne den Weg einer GET-Anfrage zum lokalen Testdienst und beschrifte beide Richtungen.&lt;br /&gt;
# [[HTTP-Statuscode]]: Schreibe für 200, 404 und 503 je einen selbst formulierten Satz mit einem erfundenen Beispiel.&lt;br /&gt;
# [[JSON]]: Markiere in zwei synthetischen Datenobjekten die Schlüssel, die Zahl und die Einheit; erkläre jedes Feld.&lt;br /&gt;
# [[Schnittstelle]]: Erstelle eine Steckkarte für /api/v1/werte mit Methode, erwarteter Antwort und Verbot von Schreibzugriff.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Standard ===&lt;br /&gt;
# [[Testprotokoll]]: Teste den Normalfall und dokumentiere Erwartung, Beobachtung, Wert und Einheitenprüfung.&lt;br /&gt;
# [[Timeout]]: Simuliere den langsamen Pfad mit Karten oder Python und begründe die feste Wartegrenze.&lt;br /&gt;
# [[Fehlerbehandlung]]: Untersuche ungültiges JSON und begründe, warum der Client trotz Status 200 keine Zahl anzeigen darf.&lt;br /&gt;
# [[Wiederholungsstrategie]]: Zeige den zweimaligen 503-Fall und begründe, warum ein dritter Versuch unterbleibt.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Schwer ===&lt;br /&gt;
# [[API-Design]]: Beschreibe einen zweiten synthetischen Lesedatensatz samt Ressourcenpfad, JSON-Schema und plausiblen Fehlern.&lt;br /&gt;
# [[Validierung]]: Entwickle drei Tests für gültiges JSON mit fehlendem Feld, falscher Einheit oder ungeeignetem Datentyp.&lt;br /&gt;
# [[KI-Agent]]: Prüfe eine selbst erfundene problematische KI-Empfehlung mit einer Allowlist und begründe deine Ablehnung.&lt;br /&gt;
# [[Risikomanagement]]: Vergleiche zwei Fehlerstrategien, diskutiere Timeout und Wiederholungsbudget und dokumentiere die sichere Grenze ohne Maschinenzugang.&lt;br /&gt;
&lt;br /&gt;
{{:Offene Aufgabe - MOOC erstellen}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernkontrolle =&lt;br /&gt;
# [[Schnittstellenvertrag]]: Begründe, warum ein HTTP-Status allein keine fachlich gültige Messung nachweist.&lt;br /&gt;
# [[Timeout-Behandlung]]: Erkläre bei zwei langsam beantworteten GET-Abfragen die erwartete Reaktion und die Versuchszahl.&lt;br /&gt;
# [[JSON-Validierung]]: Vergleiche defektes JSON mit formal gültigem JSON falscher Einheit und begründe unterschiedliche Prüfungen.&lt;br /&gt;
# [[Fehlerstrategie]]: Entscheide bei 404, 503 und lokalem Timeout, wann eine Wiederholung im Lehrvertrag sinnvoll ist.&lt;br /&gt;
# [[KI-Sicherheit]]: Erkläre, warum ein Agentenvorschlag keine Berechtigung erzeugt und weshalb ein fremder Host zurückzuweisen ist.&lt;br /&gt;
# [[Transfer]]: Beschreibe eine neue lokale Leseschnittstelle und dokumentiere zwei Negativtests und ihre Bedeutung.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernnachweis =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Abzugeben ist ein prüfbares Portfolio&amp;#039;&amp;#039;&amp;#039;, alternativ vollständig handschriftlich mit Antwortkarten: (1) einseitiger Schnittstellenvertrag für den lokalen lesenden Dienst, (2) Ablaufdiagramm vom GET bis zur geprüften Anzeige, (3) Client als Python-Datei oder gleichwertiger ausführlicher Entscheidungsgang, (4) Tabelle mit vier Testfällen Normalfall, Timeout, defektes JSON und wiederholter 503, (5) eigene Begründung zu &amp;#039;&amp;#039;&amp;#039;Timeout behandeln, ungültiges JSON erkennen, Wiederholungen begrenzen&amp;#039;&amp;#039;&amp;#039; und (6) begründete Abgrenzung gegen Maschinenzugang und Agenten-Selbstfreigabe.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beurteilungskriterien:&amp;#039;&amp;#039;&amp;#039; fachlich richtige HTTP-/JSON-Begriffe; reproduzierbare Eingaben und erwartete Ausgaben; keine unerkannte Falschanzeige; maximal zwei Versuche; belegbarer Abbruch; selbstständige und verständliche Entscheidungen. Ein Screenshot allein genügt nicht. Keine realen Studierenden-, Betriebs- oder Messdaten einreichen. &amp;#039;&amp;#039;&amp;#039;Selbstkontrolle:&amp;#039;&amp;#039;&amp;#039; Kann eine andere Person mit denselben Testfällen deinen Ablauf nachvollziehen, ohne einen externen Dienst zu verwenden?&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= OER und Wikipedia =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Quellenstand: 22.10.2026; Versionsangaben, soweit an der Quelle ersichtlich.&amp;#039;&amp;#039;&amp;#039; Internetseiten und Videowiedergabe können sich verändern. Die MOOCwiki-Grundlagenseite mit curid=60654 war während der Recherche nicht zuverlässig abrufbar; ihr Inhalt wird nicht ungeprüft zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/de/docs/Web/HTTP/Guides/Overview MDN: Überblick über HTTP] – deutschsprachige technische Erläuterung zu Anfrage, Antwort, GET und Statuscodes (Online-Dokumentation, laufende Pflege).&lt;br /&gt;
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status MDN: HTTP response status codes] – Definitionen nach HTTP-Standards, insbesondere 200, 404, 503 (laufende Dokumentation).&lt;br /&gt;
* [https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch MDN: Using the Fetch API] – Statusprüfung und fehlerbewusster Datenabruf (laufende Dokumentation).&lt;br /&gt;
* [https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf NIST AI 600-1, Generative AI Profile] – Juli 2024, Risiko- und Verantwortungsrahmen, keine Softwarefreigabe.&lt;br /&gt;
* [https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices MCP Security Best Practices] – Dokumentationspfad 2026-07-28, zusätzliche Sicherheitsrisiken bei Agenten-Werkzeugzugriff; keine Behauptung, dass MCP selbst hier installiert sein müsse.&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Representational_State_Transfer Wikipedia: Representational State Transfer] und [https://de.wikipedia.org/wiki/JavaScript_Object_Notation Wikipedia: JSON] – offene Vertiefungen; Artikelversionen ändern sich.&lt;br /&gt;
* [https://moocwiki.org/index.php?curid=60654 Vorhandener Lernbaustein] – Grundlagenanker; nicht als verifiziertes Zitat benutzt.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nachgewiesene Wikimedia-Commons-Dateiseiten und Rechte:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Eingebundene Datei !! Echte Dateiseite !! Urheber !! Kennzeichnung&lt;br /&gt;
|-&lt;br /&gt;
| File:Client-server model.svg || [https://commons.wikimedia.org/wiki/File:Client-server_model.svg Commons] || Lubaochuan || [https://creativecommons.org/licenses/by-sa/4.0/ CC BY-SA 4.0]&lt;br /&gt;
|-&lt;br /&gt;
| File:HTTP-Anfrage.svg || [https://commons.wikimedia.org/wiki/File:HTTP-Anfrage.svg Commons] || Sébastien Santoro/Dereckson; Kulandru mor || [https://commons.wikimedia.org/wiki/File:HTTP-Anfrage.svg Gemeinfrei laut Dateiseite]&lt;br /&gt;
|-&lt;br /&gt;
| File:Web API diagram.svg || [https://commons.wikimedia.org/wiki/File:Web_API_diagram.svg Commons] || I.hate.spam.mail.here || [https://creativecommons.org/publicdomain/zero/1.0/ CC0 1.0]&lt;br /&gt;
|-&lt;br /&gt;
| File:JSON vector logo.svg || [https://commons.wikimedia.org/wiki/File:JSON_vector_logo.svg Commons] || Douglas Crockford || [https://commons.wikimedia.org/wiki/File:JSON_vector_logo.svg Gemeinfreies einfaches Logo laut Commons; Markenrecht gesondert prüfen]&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Videoquelle:&amp;#039;&amp;#039;&amp;#039; [https://www.youtube.com/watch?v=BUFN0WMVW3k Programmieren Starten: Was ist JSON?] (18.11.2019; reguläre YouTube-Nutzungsrechte, keine freie Nachnutzung zugesichert). Die Wiedergabe war beim Abruf der Videoseite nicht unabhängig bestätigbar. Die eingebettete Fremdquelle ist optional; sämtliche Lernziele und Tests funktionieren mit der Textalternative.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://de.m.wikipedia.org/wiki/Representational_State_Transfer &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Medienfreie Alternative:&amp;#039;&amp;#039;&amp;#039; Verwende die beschriebenen Client-Server-Pfeile, die ausgeschriebene Beispielanfrage, die JSON-Textbeispiele und die vollständig lokalen Fehlerkarten. Weitere Audio- oder Animationsdateien sind nicht eingebettet, da keine ausreichend passende und verlässlich lizenzierte Quelle bestätigt wurde.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Verknüpfte Lernbereiche =&lt;br /&gt;
{| align=center&lt;br /&gt;
{{:D-Tab}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Programmierschnittstelle|API und Datenvertrag]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# [[Hypertext Transfer Protocol|HTTP und Statuscodes]]&lt;br /&gt;
# [[Representational State Transfer|REST und Ressourcen]]&lt;br /&gt;
# [[JavaScript Object Notation|JSON und Datenschema]]&lt;br /&gt;
# [[Fehlerbehandlung|Timeout und Wiederholungsbegrenzung]]&lt;br /&gt;
# [[Informationssicherheit|Berechtigungen und sichere Tests]]&lt;br /&gt;
# [[Künstliche Intelligenz|KI-Agenten kritisch prüfen]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Sprache:Deutsch]]&lt;br /&gt;
[[Category:Locale:de-DE]]&lt;br /&gt;
[[Category:Informatik]]&lt;br /&gt;
[[Category:Berufsausbildung]]&lt;br /&gt;
[[Category:Anwendungsentwicklung]]&lt;br /&gt;
[[Category:Programmierschnittstelle]]&lt;br /&gt;
[[Category:IT-Sicherheit]]&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= aiMOOC-Projekte =&lt;br /&gt;
[[Category:AI_MOOC]] [[Category:GPT aiMOOC]]&lt;br /&gt;
{{MT}}&lt;/div&gt;</summary>
		<author><name>Glanz</name></author>
	</entry>
</feed>