Zum Hauptinhalt springen

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.