EMZETT.
Login

API-Stile im Vergleich: REST, GraphQL, gRPC, SOAP und JSON-RPC

Kurz: Es gibt mehrere Wege, Schnittstellen zu bauen: REST ist universell, GraphQL flexibel für Clients, gRPC schnell zwischen Diensten, SOAP formal und JSON-RPC schlank.

Genauer: Eine API (Schnittstelle) legt fest, wie Programme miteinander sprechen. Die Wahl des Stils beeinflusst Leistung, Aufwand und Werkzeuge. Es gibt kein „bestes“, nur ein passendes Verfahren.

Im Detail

REST

Ressourcen mit URLs (/nutzer/42), Standard-HTTP-Methoden (GET, POST, PUT, DELETE), meist JSON. Stärken: einfach, überall unterstützt, gut cachebar, leicht zu testen (curl, Browser). Schwächen: Über-/Unterabruf (zu viele oder zu wenige Daten pro Anfrage), mehrere Anfragen für verschachtelte Daten, Versionierung nötig. Beschreibung per OpenAPI.

GraphQL

Ein Endpunkt; der Client beschreibt, welche Felder er will:

{ nutzer(id: 42) { name bestellungen { summe } } }

Stärken: genau die benötigten Daten, eine Anfrage für verschachtelte Daten, starkes Schema/Typen, gut für Frontends und mobile Apps. Schwächen: Caching komplizierter, Komplexitätsangriffe (zu tiefe Anfragen) abwehren, N+1-Probleme im Server, Lernaufwand.

gRPC

Von Google, nutzt Protocol Buffers (kompakte Binärformate) über HTTP/2 mit Streaming in beide Richtungen und Code-Generierung für viele Sprachen. Stärken: sehr schnell, klare Verträge (.proto), ideal für Microservices untereinander. Schwächen: Im Browser nur über Umwege (gRPC-Web), Binärformat schwerer zu debuggen.

SOAP und JSON-RPC

  • SOAP: XML-basiert, formales WSDL-Schema, Standards für Sicherheit und Transaktionen (WS-*). Üblich in Unternehmen/Behörden/Banken (Altsysteme); schwerfällig.
  • JSON-RPC / XML-RPC: Funktionsaufrufe über HTTP ({"method": "addiere", "params": [1,2]}), sehr schlank; verwendet in Blockchain-Knoten (Ethereum), Editoren (LSP Language Server Protocol).
  • Dazu WebSockets/SSE für Echtzeit, Webhooks für Ereignisse, tRPC (TypeScript-Ende-zu-Ende-Typen).

Auswahl

  • Öffentliche API für viele Fremde: REST (+ OpenAPI).
  • Komplexe Frontends mit wechselnden Datenwünschen: GraphQL.
  • Interne Dienst-zu-Dienst-Kommunikation mit Leistungsbedarf: gRPC.
  • Anbindung an Altsysteme: SOAP.
  • Kleine, einfache Aufrufe: JSON-RPC. Beachte immer Authentifizierung, Rate Limiting, Versionierung, Fehlerformate und Dokumentation.

Siehe auch: REST-API-Design, GraphQL und gRPC, OpenAPI und Swagger, WebSockets