Arten von APIs
1. REST APIs (Representational State Transfer)
Hauptmerkmale
- Zustandslos
- Client-Server Architektur
- Cacheable
- Ressourcen-orientiert (Weil URLs Ressourcen repräsentieren)
HTTP Methoden
GET /users # Hole alle User
POST /users # Erstelle neuen User
PUT /users/123 # Update User 123 komplett
PATCH /users/123 # Update User 123 teilweise
DELETE /users/123 # Lösche User 123
Beispiel REST-Call
// Fetch API Beispiel
fetch('https://api.example.com/users/123', {
method: 'GET',
headers: {
'Accept': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data));
2. GraphQL
Hauptmerkmale
- Ein einziger Endpunkt
- Client bestimmt Datenstruktur
- Stark typisiert
- Vermeidet Over/Under-fetching
Beispiel Query
query {
user(id: "123") {
name
email
posts {
title
comments {
text
}
}
}
}
Beispiel Mutation
mutation {
createUser(input: {
name: "Max"
email: "max@example.com"
}) {
id
name
}
}
3. SOAP (Simple Object Access Protocol)
Hauptmerkmale
- XML-basiert
- Strikte Standards
- Plattform- und sprachunabhängig
- Eigene Sicherheitsfunktionen
Beispiel SOAP Request
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getUser>
<id>123</id>
</getUser>
</soap:Body>
</soap:Envelope>
4. Vergleich der API-Arten
REST vs GraphQL
REST:
GET /users/123
GET /users/123/posts
GET /users/123/posts/1/comments
GraphQL:
query {
user(id: "123") {
posts {
comments
}
}
}
Anwendungsfälle
REST ist gut für:
- Einfache CRUD Operationen
- Caching-Anforderungen
- Standardisierte Schnittstellen
- Schnelle Integration
GraphQL ist gut für:
- Mobile Apps
- Komplexe Datenbeziehungen
- Flexible Datenanforderungen
SOAP ist gut für:
- Enterprise-Umgebungen
- Strikte Sicherheitsanforderungen
- Legacy-Systeme
5. WebSocket APIs
Hauptmerkmale
- Bidirektionale Kommunikation
- Dauerhafte Verbindung
- Echtzeit-Updates
Beispiel WebSocket
const ws = new WebSocket('wss://api.example.com');
ws.onopen = () => {
console.log('Verbunden!');
ws.send('Hello Server!');
};
ws.onmessage = (event) => {
console.log('Nachricht erhalten:', event.data);
};
6. gRPC (Google Remote Procedure Call)
- Merkmale:
- gRPC ist ein Protokoll, das auf HTTP/2 basiert und Protobuf (Protocol Buffers) verwendet, um Nachrichten in einem binären Format zu serialisieren, was eine schnellere Datenübertragung ermöglicht.
- Unterstützt bidirektionale Kommunikation (Streaming) und asynchrone Anfragen.
- Beispiel: Eine gRPC-API für ein Echtzeit-Chat-System.
- Bidirektionales Streaming: Client und Server können Nachrichten kontinuierlich austauschen, ohne auf eine Anfrage-Antwort-Struktur beschränkt zu sein.
- Effizienz: Das Protobuf-Format reduziert die Datenmenge erheblich, was die Performance für datenintensive Anwendungen wie Live-Streaming oder Kommunikation mit hoher Frequenz optimiert.
- Vorteile:
- Hohe Leistung und Effizienz, besonders bei geringer Latenz und hohen Anforderungen an die Datenübertragung.
- Besonders geeignet für Microservices-Architekturen und Anwendungen mit Echtzeitanforderungen.
- Nachteile:
- Geringere Verbreitung und eine steilere Lernkurve als bei REST oder GraphQL.
- Die Nutzung des binären Formats (Protobuf) kann die Fehlersuche erschweren, da die Nachrichten nicht ohne weiteres lesbar sind.
7. tRPC (TypeScript RPC)
- Merkmale:
- tRPC ist ein modernes RPC-Framework, das auf TypeScript basiert und die Typsicherheit von TypeScript für die API-Entwicklung nutzt.
- Unterstützt asynchrone Funktionen, Typüberprüfung und automatische Generierung von Client-Code.
- Beispiel: Eine tRPC-API für eine E-Commerce-Plattform.
- Typsicherheit: Durch die Verwendung von TypeScript für die API-Definition und -Implementierung wird die Typsicherheit verbessert und die Fehleranfälligkeit reduziert.
- Automatische Generierung von Client-Code: tRPC kann Client-Code für verschiedene Plattformen (Web, Mobile, etc.) automatisch generieren, was die Integration und Wartung erleichtert.
- Vorteile:
- Typsicherheit und Code-Qualität durch die Verwendung von TypeScript.
- Einfache Integration und Wartung durch automatische Generierung von Client-Code.
- Nachteile:
- Geringere Verbreitung und Community-Unterstützung im Vergleich zu etablierten Frameworks wie REST oder GraphQL.
- Möglicherweise steilere Lernkurve für Entwickler, die nicht mit TypeScript vertraut sind.