API-Architekturen im Γberblick
βAPI" ist ein Sammelbegriff fΓΌr sehr unterschiedliche Kommunikationsmuster. Manche sind synchron, manche streamen, manche pushen. Dieser Guide ordnet die gΓ€ngigen API-Architekturen ein β mit klaren Vor- und Nachteilen und konkreten Einsatzgebieten. Ein passender Laravel-Implementierungs-Guide liegt unter Laravel-API-Guide.
1. Schnell-Entscheidungshilfeβ
| Du willst⦠| Nimm |
|---|---|
| CRUD ΓΌber Ressourcen, einfache Web-API | REST |
| Flexible Queries, mehrere Clients (Web/Mobile) | GraphQL |
| Hochperformante Service-zu-Service-Kommunikation | gRPC |
| Echtzeit-Bidirektional (Chat, Multiplayer) | WebSocket |
| Server-zu-Client-Stream (Notifications, Tickers) | Server-Sent Events |
| Event-Push an Drittsysteme | Webhooks |
| Type-safe End-to-End in TypeScript-Monorepo | tRPC |
| Legacy-Enterprise-Integration (Banken, ERP) | SOAP |
| Simple Remote-Procedure-Call | JSON-RPC |
| Async-Message-Bus, entkoppelte Services | Message Queue / Event Streaming |
2. Die Architektur-Landkarteβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SYNCHRON / REQUEST-RESPONSE β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β REST β GraphQL β gRPC β SOAP β JSON-RPC β tRPC β
β HTTP β HTTP β HTTP/2 β HTTP/XML β HTTP β HTTP β
β Ressrc. β Query β Proto β WSDL β Methode β TS-Function β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STREAMING β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β WebSocket β Server-Sent Events β gRPC-Streaming β
β bidirektional β Server β Client β bi/uni-direktional β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EVENT-DRIVEN β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Webhooks β Message Queue (RabbitMQ, SQS) β Event Streaming (Kafka) β
β HTTP-Push β Producer β Consumer β Append-Only Log β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3. REST (Representational State Transfer)β
Was es ist: Der De-facto-Standard fΓΌr Web-APIs. Ressourcen als URLs, HTTP-Methoden als Verben, JSON als Payload.
GET /api/users β Liste
GET /api/users/42 β Einzelressource
POST /api/users β Neu anlegen
PUT /api/users/42 β Komplett ersetzen
PATCH /api/users/42 β Teil-Update
DELETE /api/users/42 β LΓΆschen
Vorteileβ
- Universell verstanden β jede Sprache, jeder Browser, jedes Tool
- Caching out of the box ΓΌber HTTP-Cache-Header
- Einfach zu testen mit curl, Postman, Browser
- Stateless β horizontal skalierbar ohne Sticky Sessions
- Riesiges Tooling: OpenAPI/Swagger, Postman, Insomnia
Nachteileβ
- Over-/Under-Fetching: Clients holen oft zu viel oder zu wenig pro Request
- N+1-Requests bei verschachtelten Ressourcen
- Versionierung umstΓ€ndlich:
/v1/,/v2/oder Header - Keine Typsicherheit zwischen Server und Client (ohne OpenAPI-Codegen)
Einsatzgebieteβ
- Γffentliche Web-APIs (Stripe, GitHub, Shopify)
- Klassische CRUD-Backends
- Mobile-/SPA-Backends mittlerer KomplexitΓ€t
- Microservices mit moderater Performance-Anforderung
4. GraphQLβ
Was es ist: Eine Query-Sprache. Der Client beschreibt exakt, welche Felder er braucht, der Server liefert nur diese.
query {
user(id: 42) {
name
email
orders(last: 5) {
id
total
}
}
}
Vorteileβ
- Kein Over-/Under-Fetching β Client steuert die Form
- Eine Query, viele Ressourcen β ersetzt mehrere REST-Aufrufe
- Typsicheres Schema als Single Source of Truth
- Selbstdokumentierend via Introspection (GraphiQL, Apollo Studio)
- Subscriptions fΓΌr Echtzeit-Updates (ΓΌber WebSocket)
Nachteileβ
- Caching aufwendiger β HTTP-Cache funktioniert nicht out of the box
- N+1-Falle im Resolver β DataLoader-Pattern Pflicht
- Query-KomplexitΓ€t kann den Server killen β Depth-/Cost-Limits nΓΆtig
- File Uploads kompliziert
- Lernkurve fΓΌr Team und Tools
Einsatzgebieteβ
- BFF (Backend-for-Frontend) fΓΌr mehrere Clients
- Mobile-Apps mit variablen View-Anforderungen
- Aggregations-Layer ΓΌber viele Microservices
- Produkte mit hΓ€ufig wechselndem UI (z. B. Marketplace, Dashboards)
Bekannte Nutzer: GitHub, Shopify, Facebook, Twitter API v2
5. gRPCβ
Was es ist: Google's RPC-Framework ΓΌber HTTP/2 mit Protocol Buffers als Wire-Format. BinΓ€r, schnell, typsicher.
service UserService {
rpc GetUser (UserRequest) returns (User);
rpc StreamOrders (OrderFilter) returns (stream Order);
}
message User {
int32 id = 1;
string name = 2;
}
Vorteileβ
- Sehr schnell: BinΓ€rformat, HTTP/2-Multiplexing
- Echte Typsicherheit via
.proto-Files, Codegen fΓΌr 10+ Sprachen - Streaming nativ: Unary, Server-Stream, Client-Stream, Bidirectional
- Schemata sind Pflicht β kein βWildwuchs"
- Polyglott: Go β Java β Python β Rust β Node mit denselben Schnittstellen
Nachteileβ
- Schwer im Browser (gRPC-Web als KrΓΌcke, oft mit Envoy-Proxy)
- BinΓ€r β nicht im Browser debugbar ohne extra Tools
- Steile Lernkurve fΓΌr Teams ohne Proto-Erfahrung
- HTTP-Caching entfΓ€llt
Einsatzgebieteβ
- Service-zu-Service in Microservice-Architekturen
- Performance-kritische interne APIs
- IoT-GerΓ€te mit schmalbandiger Verbindung
- Multi-Sprach-Backend-Landschaften
Bekannte Nutzer: Google intern, Netflix, Square, Cilium, etcd, Kubernetes
6. WebSocketβ
Was es ist: Persistente, bidirektionale TCP-Verbindung ΓΌber HTTP-Upgrade. Server und Client kΓΆnnen jederzeit Nachrichten pushen.
Vorteileβ
- Echtzeit-Bidirektional mit niedriger Latenz
- Sehr geringe Overhead pro Nachricht (keine HTTP-Header je Frame)
- Browser-nativ (
new WebSocket(...)) - Perfekt fΓΌr Chats, Games, Live-Editing, Trading
Nachteileβ
- Zustandsbehaftet β Sticky Sessions oder Pub/Sub-Bus nΓΆtig
- Skalierung anspruchsvoll β jede Verbindung belegt Server-Memory
- Reconnect-Logik im Client Pflicht
- HTTP-Proxies/Firewalls machen manchmal Γrger
- Kein eingebautes Backpressure β muss man selbst bauen
Einsatzgebieteβ
- Chat-Anwendungen (Slack, Discord)
- Collaborative Editing (Figma, Google Docs Cursors)
- Live-Dashboards, Stock-Ticker
- Online-Multiplayer-Games
- Realtime-Benachrichtigungen mit User-Interaktion
Frameworks: Socket.IO, Pusher, Soketi, Laravel Reverb, Ably
7. Server-Sent Events (SSE)β
Was es ist: HTTP-Stream, bei dem der Server kontinuierlich Events an den Client sendet. Einseitig (Server β Client).
GET /events
Content-Type: text/event-stream
data: {"price": 42}
data: {"price": 43}
Vorteileβ
- Γber regulΓ€res HTTP β funktioniert mit jedem Proxy, jedem Load Balancer
- Auto-Reconnect im Browser eingebaut (
EventSource) - Sehr einfach zu implementieren β fast wie ein langer Response
- Kein neues Protokoll β HTTP-Caching/Auth funktioniert
- Perfekt fΓΌr LLM-Streaming (ChatGPT, Claude UI nutzen SSE)
Nachteileβ
- Einseitig β Client kann nicht ΓΌber denselben Channel pushen
- Browser-Limit: 6 SSE-Verbindungen pro Domain (HTTP/1.1)
- PHP/Laravel brauchen Long-Running-Worker oder Reverb-Setup
Einsatzgebieteβ
- LLM-Output-Streaming (ChatGPT, Claude)
- Live-Notifications (Inbox, Alerts)
- Progress-Updates fΓΌr lange Jobs
- Activity-Feeds, Stock-Prices
8. Webhooksβ
Was es ist: Reverse-API. Statt zu pollen, registriert der Client eine URL β der Server ruft sie an, wenn ein Event eintritt.
Stripe β POST https://example.com/webhooks/stripe
Body: { "type": "payment.succeeded", ... }
Vorteileβ
- Push statt Poll β sofortige Reaktion, kein Lastpolling
- Einfach zu implementieren β nur eine HTTP-Endpoint nΓΆtig
- Lose Kopplung zwischen Systemen
Nachteileβ
- EmpfΓ€nger muss ΓΆffentlich erreichbar sein (oder Tunnel: ngrok, smee.io)
- Retry/Delivery-Garantien je nach Anbieter unterschiedlich
- Signature-Verifikation Pflicht (sonst Spoofing)
- Idempotenz muss eigener EmpfΓ€nger-Code sicherstellen
Einsatzgebieteβ
- Payment-Provider (Stripe, PayPal, Mollie)
- Git-Plattformen (GitHub, GitLab β CI-Trigger)
- SaaS-Integrationen (Slack-Events, Zapier)
- Mailservices (SendGrid, Postmark Delivery-Status)
9. SOAPβ
Was es ist: XML-basiertes, schwergewichtiges RPC-Protokoll mit WSDL-Schema. Aus der Web-1.0-Γra, aber in Enterprise und BehΓΆrden noch sehr lebendig.
<soap:Envelope>
<soap:Body>
<getUser>
<id>42</id>
</getUser>
</soap:Body>
</soap:Envelope>
Vorteileβ
- Strict Schema via WSDL
- WS-Security, WS-Transactions β Enterprise-Features eingebaut
- In Banken, Versicherungen, BehΓΆrden Standard
Nachteileβ
- Verbose XML β riesige Payloads
- Steile Lernkurve, schwierig zu debuggen
- Tooling stirbt langsam auΓerhalb von Java/.NET
- Kein Browser-Friendly-Pattern
Einsatzgebieteβ
- Banken-Schnittstellen, Versicherungs-EAI
- Legacy-ERP-Systeme (SAP-PI)
- BehΓΆrden-Web-Services (z. B. ELSTER, EU-Plattformen)
- Wenn das GegenΓΌber es so verlangt β Punkt.
10. JSON-RPCβ
Was es ist: Schlankes RPC-Protokoll, das JSON statt XML nutzt. Eine Methode + Parameter + Response.
{
"jsonrpc": "2.0",
"method": "getUser",
"params": { "id": 42 },
"id": 1
}
Vorteileβ
- Sehr einfach β nur 3 Felder Pflicht
- Batch-Requests nativ
- Notifications (Fire-and-Forget) eingebaut
- Transport-agnostisch β HTTP, WebSocket, raw TCP
Nachteileβ
- Keine REST-Konventionen β Caching, Status-Codes weniger natΓΌrlich
- Weniger Tooling als REST/GraphQL
- Versionierung selbst lΓΆsen
Einsatzgebieteβ
- Ethereum/Bitcoin-Nodes (Standard-Wallet-API)
- Language-Server-Protokoll (LSP), Debug-Adapter-Protokoll
- Bridged WebSocket-RPCs in Trading-Plattformen
11. tRPCβ
Was es ist: Type-safe RPC fΓΌr TypeScript-Monorepos. Server-Funktionen werden im Client wie lokale Funktionen aufgerufen β mit voller Typsicherheit, ohne Codegen.
// Server
export const appRouter = router({
getUser: publicProcedure
.input(z.object({ id: z.number() }))
.query(({ input }) => db.user.findUnique({ where: { id: input.id } }))
});
// Client
const user = await trpc.getUser.query({ id: 42 }); // Autocomplete + Typen!
Vorteileβ
- End-to-end-Typsicherheit ohne separates Schema
- Kein Codegen-Schritt
- Subscriptions, Batching, Caching out of the box
- Sehr produktiv in Next.js/Remix-Monorepos
Nachteileβ
- Nur TypeScript zu TypeScript
- Nicht ΓΆffentlich konsumierbar β keine OpenAPI-Doku, keine externen Clients
- Vendor-Bindung an JS-Γkosystem
Einsatzgebieteβ
- Full-Stack-TS-Apps (Next.js, Remix, T3-Stack)
- Interne Tools mit kleinem Team
- Schnelle Prototypen mit Type-Safety
12. Message Queues & Event Streamingβ
Was es ist: Asynchrone Kommunikation. Producer schreibt Nachrichten in eine Queue/Stream, Consumer liest sie unabhΓ€ngig.
| Queue (RabbitMQ, SQS, Redis) | Stream (Kafka, Redpanda, Pulsar) | |
|---|---|---|
| Modell | Punkt-zu-Punkt | Publish-Subscribe, Append-Only-Log |
| Persistenz | bis Consume | Tage/Wochen, Replay mΓΆglich |
| Reihenfolge | per Queue garantiert | per Partition |
| StΓ€rken | Einfach, Job-Workers | Event-Sourcing, Replay, hohe DurchsΓ€tze |
Vorteileβ
- Entkopplung von Producer und Consumer
- Lastspitzen abfedern durch Pufferung
- At-least-once-Delivery mit Retries
- Skalierung horizontal ΓΌber Consumer Groups
- Audit-Trail (insbes. Kafka-Streams)
Nachteileβ
- Eventual Consistency β keine synchronen Antworten
- Betriebs-Overhead (Kafka, RabbitMQ sind eigene Systeme)
- Debugging schwerer β Nachrichten verteilen sich ΓΌber mehrere Services
- Idempotenz muss im Consumer gelΓΆst sein
Einsatzgebieteβ
- Hintergrund-Jobs (E-Mails, Bildverarbeitung, PDF-Generation)
- Inter-Service-Events (Order-Created β Inventory, Shipping, Billing)
- Event-Sourcing-Architekturen
- ETL-Pipelines, Analytics-Streams
13. GroΓe Vergleichstabelleβ
| Architektur | Latenz | Durchsatz | Typsicherheit | Browser | Streaming | Caching | Lernkurve |
|---|---|---|---|---|---|---|---|
| REST | mittel | mittel | ΓΌber OpenAPI | β | βͺ | β | flach |
| GraphQL | mittel | mittel | β | β | β (Subs) | tlw. | steil |
| gRPC | sehr niedrig | hoch | β Proto | βͺ (Web-Proxy) | β | βͺ | steil |
| WebSocket | sehr niedrig | hoch | β | β | β | βͺ | mittel |
| SSE | niedrig | mittel | β | β | β einseitig | βͺ | flach |
| Webhooks | n. a. | n. a. | β | n. a. | βͺ | n. a. | flach |
| SOAP | hoch | niedrig | β WSDL | βͺ | βͺ | βͺ | sehr steil |
| JSON-RPC | mittel | mittel | β | β | tlw. | βͺ | flach |
| tRPC | mittel | mittel | β via TS | β | β | β | flach (TS) |
| Queues/Streams | async | sehr hoch | tlw. (Avro/Proto) | βͺ | n. a. | n. a. | mittelβsteil |
14. Auswahl-Heuristikβ
βIch baue eine ΓΆffentliche API."β
β REST mit OpenAPI-Spec. Wenn flexible Queries kritisch: GraphQL.
βMicroservices intern, hohe Performance."β
β gRPC. FΓΌr Events zusΓ€tzlich Kafka/RabbitMQ.
βChat, Multiplayer, Collab-Editing."β
β WebSocket (Laravel: Reverb, Pusher, Soketi).
βLLM-Streaming, Notifications."β
β SSE. Einfacher als WebSocket und vollkommen ausreichend.
βDrittsystem soll mich aktiv informieren."β
β Webhooks mit HMAC-Signatur.
βFull-Stack-TS-App, Solo oder kleines Team."β
β tRPC. Maximale ProduktivitΓ€t.
βBank/Versicherung verlangt es."β
β SOAP. Punkt.
βHintergrund-Jobs, hohe Last."β
β Queue (Redis/SQS) fΓΌr Jobs, Kafka fΓΌr Event-Sourcing.
15. Sicherheits-Querschnittβ
- Authentication: JWT, OAuth2, API-Keys β nie selbst Crypto bauen
- Authorization: Pro Endpoint/Methode/Topic prΓΌfen, nicht nur Login
- Rate Limiting auf Anbieter- und Nutzer-Ebene
- Input-Validation strikt β Zod, FormRequests, JSON-Schemas
- TLS ΓΌberall, auch intern
- CORS explizit konfigurieren, nie
*fΓΌr Auth-Endpoints - Webhook-Signaturen (HMAC) bei eingehenden Webhooks immer verifizieren
- GraphQL: Query-Depth- und Cost-Limits, Persisted Queries
- WebSocket: Auth beim Upgrade-Handshake, nicht erst pro Message
- gRPC: mTLS fΓΌr interne Service-Calls
16. Praktischer Kombi-Stackβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Public API (Mobile + 3rd Party) β
β ββ REST + OpenAPI versioniert, dokumentiert β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Web-Frontend (SPA / Next.js) β
β ββ GraphQL oder tRPC typsicher, flexibel β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Service-zu-Service β
β ββ gRPC schnell, typsicher β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Echtzeit-UI β
β ββ WebSocket (Reverb) / SSE Live-Updates β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Hintergrund-Jobs / Events β
β ββ Queue (Redis/SQS) + Kafka async, entkoppelt β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Eingehende 3rd-Party-Events β
β ββ Webhooks (Stripe, GitHub, β¦) HMAC-verifiziert β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
17. WeiterfΓΌhrendβ
- Laravel-Implementierung jeder Architektur β Laravel-API-Guide
- OpenAPI / Swagger Playground β API Playground
Externe Quellen
- REST β Roy Fielding's Dissertation
- GraphQL Spec
- gRPC
- tRPC
- WebSocket RFC 6455
- Server-Sent Events (WHATWG)
- Webhooks.fyi
βArchitekturen wΓ€hlt man nicht nach Mode, sondern nach Kommunikationsmuster, Konsistenzanforderung und Team-Skill."