3.2 KiB
3.2 KiB
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
// 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 version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header/>
<soap:Body>
<GetUserRequest xmlns="http://beispiel.de/api">
<UserId>123</UserId>
</GetUserRequest>
</soap:Body>
</soap:Envelope>
GraphQL
Konzepte
GraphQL - Besonderheiten
├── Eine Anfrage, viele Daten
├── Client definiert benötigte Felder
├── Stark typisiert (Schema)
└── Keine Over- oder Underfetching
GraphQL-Beispiel
# 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)
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
Stand: 2024