# 8.2 Schnittstellen ## API-Typen ### REST (Representational State Transfer) ``` REST-Prinzipien ├── Ressourcen-orientiert ├── Stateless ├── Einheitliche Schnittstelle ├── Client-Server └── Cache-fähig ``` ### REST-Endpunkte ``` Beispiel: Benutzer-API GET /api/benutzer → Alle Benutzer GET /api/benutzer/123 → Ein Benutzer POST /api/benutzer → Erstellen PUT /api/benutzer/123 → Aktualisieren DELETE /api/benutzer/123 → Löschen ``` ### REST-Beispiel ```javascript // Express.js Server const express = require('express'); const app = express(); app.get('/api/benutzer/:id', async (req, res) => { const benutzer = await findBenutzer(req.params.id); res.json(benutzer); }); app.post('/api/benutzer', async (req, res) => { const neuerBenutzer = await createBenutzer(req.body); res.status(201).json(neuerBenutzer); }); ``` --- ## SOAP (Simple Object Access Protocol) ### Unterschiede zu REST | Kriterium | REST | SOAP | |-----------|------|------| | Format | JSON, XML | Nur XML | | Transport | HTTP | HTTP, SMTP | | Stateless | Ja | Optional | | Größe | Klein | Groß | ### SOAP-Beispiel ```xml 123 ``` --- ## GraphQL ### Konzepte ``` GraphQL - Besonderheiten ├── Eine Anfrage, viele Daten ├── Client definiert benötigte Felder ├── Stark typisiert (Schema) └── Keine Over- oder Underfetching ``` ### GraphQL-Beispiel ```graphql # Anfrage query { user(id: "123") { name email orders { id total } } } # Antwort { "data": { "user": { "name": "Max", "email": "max@example.com", "orders": [ { "id": "1", "total": 99.99 } ] } } } ``` --- ## API-Design Best Practices ### URL-Design ``` Richtlinien ├── Ressourcen plural (benutzer nicht benutzer) ├── Bindestrich für Wörter (benutzer-profil) ├── Kleinbuchstaben ├── Keine Verben im Pfad └── Query-Parameter für Filter ``` ### HTTP-Statuscodes | Code | Bedeutung | Verwendung | |------|-----------|------------| | 200 | OK | Erfolgreich | | 201 | Created | Erstellt | | 400 | Bad Request | Ungültige Anfrage | | 401 | Unauthorized | Nicht angemeldet | | 404 | Not Found | Nicht gefunden | | 500 | Server Error | Fehler | --- ## API-Dokumentation ### OpenAPI (Swagger) ```yaml openapi: 3.0.0 info: title: Meine API version: 1.0.0 paths: /benutzer: get: summary: Alle Benutzer responses: '200': description: Erfolgreich content: application/json: schema: type: array items: $ref: '#/components/schemas/Benutzer' ``` ### Tools | Tool | Beschreibung | |------|-------------| | Swagger UI | Interaktive Dokumentation | | Postman | API-Testing | | Insomnia | API-Client | --- ## Querverweise - [[LF8-01-Datenquellen|Zurück: Datenquellen]] - [[LF8-03-Datenformate|Nächstes Thema: Datenformate]] --- *Stand: 2024*