Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m290_guko:learningunits:lu16:theorie:b_update_delete [2025/12/18 13:13] – angelegt gkoch | modul:m290_guko:learningunits:lu16:theorie:b_update_delete [2025/12/18 13:46] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 9: | Zeile 9: | ||
| * Sie können die Endpoints mit **Postman** testen. | * Sie können die Endpoints mit **Postman** testen. | ||
| - | <WRAP center round info 80%> | ||
| - | Diese Learning Unit baut auf Ihrer LU16-Seite auf. Sie verwenden weiterhin das gleiche '' | ||
| - | </ | ||
| Zeile 37: | Zeile 34: | ||
| * Die neuen Werte werden als JSON im Request-Body mitgeschickt. | * Die neuen Werte werden als JSON im Request-Body mitgeschickt. | ||
| - | <WRAP center round info 80%> | ||
| - | In echten REST-APIs bedeutet '' | ||
| - | Für unser Lernbeispiel erlauben wir auch „teilweise Updates“ (wenn nur einzelne Felder geschickt werden). Das ist für die Projektarbeit praktisch. | ||
| - | </ | ||
| ==== Code: PUT-Route ==== | ==== Code: PUT-Route ==== | ||
| Zeile 50: | Zeile 43: | ||
| const id = Number(req.params.id); | const id = Number(req.params.id); | ||
| - | // Post suchen | + | // Post suchen |
| const post = posts.find(p => p.post_id === id); | const post = posts.find(p => p.post_id === id); | ||
| Zeile 68: | Zeile 61: | ||
| userId === undefined && | userId === undefined && | ||
| title === undefined && | title === undefined && | ||
| - | imageUrl === undefined | + | imageUrl === undefined |
| + | description === undefined && | ||
| + | likes === undefined | ||
| + | ) { | ||
| + | return res.status(400).send(' | ||
| + | } | ||
| + | |||
| + | // Update nur für Felder, die wirklich geschickt wurden | ||
| + | if (userId !== undefined) { | ||
| + | post.user_id = userId; | ||
| + | } | ||
| + | if (title !== undefined) { | ||
| + | post.title = title; | ||
| + | } | ||
| + | if (imageUrl !== undefined) { | ||
| + | post.image_url = imageUrl; | ||
| + | } | ||
| + | if (description !== undefined) { | ||
| + | post.description = description; | ||
| + | } | ||
| + | if (likes !== undefined) { | ||
| + | post.likes = likes; | ||
| + | } | ||
| + | |||
| + | // Antwort: 200 OK + aktualisiertes Objekt | ||
| + | res.status(200).json(post); | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Test mit Postman (PUT) ==== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | - Methode: '' | ||
| + | - URL: '' | ||
| + | - Tab '' | ||
| + | - Beispiel-Body: | ||
| + | |||
| + | <WRAP box round center 80%> | ||
| + | <code json> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Erwartung: | ||
| + | |||
| + | * Status '' | ||
| + | * JSON-Objekt des aktualisierten Posts ('' | ||
| + | * Danach '' | ||
| + | |||
| + | |||
| + | ===== DELETE – Post löschen (DELETE / | ||
| + | |||
| + | ==== Was bedeutet DELETE? ==== | ||
| + | |||
| + | Mit '' | ||
| + | Der Client schickt dazu einen Request an: | ||
| + | |||
| + | * '' | ||
| + | |||
| + | Der Server sucht den passenden Post und entfernt ihn aus der Liste. | ||
| + | |||
| + | ==== Code: DELETE-Route ==== | ||
| + | |||
| + | <WRAP box round center 80%> | ||
| + | <code javascript> | ||
| + | // DELETE – Post löschen | ||
| + | app.delete('/ | ||
| + | const id = Number(req.params.id); | ||
| + | |||
| + | // Index suchen (praktisch fürs Löschen) | ||
| + | const index = posts.findIndex(p => p.post_id === id); | ||
| + | |||
| + | if (index === -1) { | ||
| + | return res.status(404).send(' | ||
| + | } | ||
| + | |||
| + | // Löschen: splice gibt ein Array zurück -> [0] ist das gelöschte Objekt | ||
| + | const deletedPost = posts.splice(index, | ||
| + | |||
| + | // Antwort: 200 OK + gelöschter Post (zur Kontrolle) | ||
| + | res.status(200).json(deletedPost); | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Test mit Postman (DELETE) ==== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | - Methode: '' | ||
| + | - URL: '' | ||
| + | |||
| + | Erwartung: | ||
| + | |||
| + | * Status '' | ||
| + | * JSON-Objekt des gelöschten Posts | ||
| + | |||
| + | Danach: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | ===== Typische Fehlerquellen ===== | ||
| + | |||
| + | * '' | ||
| + | * Bei '' | ||
| + | * Bei '' | ||
| + | * Bei '' | ||
| + | |||
| + | |||
| + | ===== Ausblick ===== | ||
| + | |||
| + | Sie können jetzt CRUD auf API-Ebene komplett: | ||
| + | |||
| + | * Create → '' | ||
| + | * Read → '' | ||
| + | * Update → '' | ||
| + | * Delete → '' | ||
| + | |||
| + | In der nächsten Unterrichtseinheit ersetzen wir die lokale Liste '' | ||