5.5 Erstellung CRUD Handlers für das eigene Projekt¶
Ziel¶
Sie können eine CRUD API ohne Datenbankanbindung mit Hilfe von JSON erstellen.
Aufgabe¶
Auf Grundlage der Theorie wird eine API gebaut, welche Daten erstellen, löschen, lesen und updaten (CRUD) kann. Da nur mit einem JSON gearbeitet wird, müssen die Daten nicht wirklich aus einer Datenbank gelöscht werden – das kommt später. Der Code wurde auf den Raspberry Pi transferiert.
Fixture-Daten auf dem Raspberry Pi¶
Die folgende Abbildung zeigt die laufende API mit den Fixture-Daten unter GET /api/v1/cars:
cars API auf dem Raspberry Pi¶
¶
Umsetzung¶
Create-Handler (POST)¶
Der Create-Handler nimmt einen neuen Datensatz entgegen und fügt ihn dem JSON-Array hinzu.
app.post('/api/v1/cars', (req, res) => {
const newItem = req.body;
cars.push(newItem);
res.status(201).json({ status: 'success', data: newItem });
});
Read-Handler (GET)¶
Der Read-Handler gibt alle Datensätze oder einen spezifischen Eintrag anhand der ID zurück.
app.get('/api/v1/cars', (req, res) => {
res.json({ status: 'success', results: cars.length, data: { cars } });
});
app.get('/api/v1/cars/:id', (req, res) => {
const item = cars.find(f => f.id === parseInt(req.params.id));
if (!item) return res.status(404).json({ status: 'fail', message: 'Not found' });
res.json({ status: 'success', data: { fixture: item } });
});
Update-Handler (PUT)¶
Der Update-Handler ersetzt einen bestehenden Datensatz vollständig.
app.put('/api/v1/cars/:id', (req, res) => {
const index = cars.findIndex(f => f.id === parseInt(req.params.id));
if (index === -1) return res.status(404).json({ status: 'fail', message: 'Not found' });
cars[index] = { id: parseInt(req.params.id), ...req.body };
res.json({ status: 'success', data: { fixture: cars[index] } });
});
Patch-Handler (PATCH)¶
Der Patch-Handler aktualisiert nur die übermittelten Felder eines Datensatzes, ohne den Rest zu überschreiben.
app.patch('/api/v1/cars/:id', (req, res) => {
const index = cars.findIndex(f => f.id === parseInt(req.params.id));
if (index === -1) return res.status(404).json({ status: 'fail', message: 'Not found' });
cars[index] = { ...cars[index], ...req.body };
res.json({ status: 'success', data: { fixture: cars[index] } });
});
Delete-Handler (DELETE)¶
Der Delete-Handler entfernt einen Datensatz anhand der ID aus dem JSON-Array. Da keine echte Datenbank verwendet wird, reicht ein splice auf das Array.
app.delete('/api/v1/cars/:id', (req, res) => {
const index = cars.findIndex(f => f.id === parseInt(req.params.id));
if (index === -1) return res.status(404).json({ status: 'fail', message: 'Not found' });
cars.splice(index, 1);
res.status(204).send();
});
Fazit¶
Die vier CRUD-Handler (POST, GET, PUT, PATCH) sowie der Delete-Handler (DELETE) wurden erfolgreich implementiert und auf dem Raspberry Pi deployed. Die API arbeitet rein mit einem JSON-Array im Speicher – eine persistente Datenbankanbindung folgt in einem späteren Schritt.