← Blog
·11 blog.minutes

API-Design: REST, GraphQL und gRPC im Jahr 2026

Eine unvoreingenommene Analyse der drei grossen API-Stile mit konkreten Entscheidungsregeln dafuer, wann welcher verwendet werden sollte und wie man sie bei Bedarf kombiniert.

Die Frage ist nie 'Was ist der beste API-Stil?' Die Frage ist 'Was ist der beste API-Stil fuer diesen spezifischen Anwendungsfall?' REST, GraphQL und gRPC existieren nebeneinander, weil jedes fuer unterschiedliche Sachen gebaut wurde. REST fuer die Einfachheit und Cache-Faehigkeit des Webs. GraphQL fuer Abfrageflexibilitaet und Frontend-Souveraenitaet. gRPC fuer interne Leistung und starke Vertraege zwischen Diensten.

Im Jahr 2026 ist die Debatte darueber, welcher Stil 'besser' ist, weitgehend abgeklungen. Erfahrene Teams kombinieren sie innerhalb derselben Architektur. Der oeffentliche Teil der API koennte GraphQL sein, um Frontend-Vielfalt zu unterstuetzen. Service-zu-Service-Kommunikation koennte gRPC sein, um die Leistung zu maximieren. Einfache CRUD-Endpunkte koennten REST sein, weil jeder sie versteht und cachen kann. Dieser Artikel hilft Ihnen, die Entscheidungen zu treffen, nicht auf einem Pferd zu wetten.

REST: Der universelle Standard

REST bleibt der Standard-API-Stil aus einem einfachen Grund: Er funktioniert ueberall. Jeder HTTP-Client, jede Programmiersprache, jeder Proxy und jeder Cache versteht REST. Er ist der am wenigsten gemeinsame Nenner und fuer unzahlige Anwendungsfaelle die richtige Wahl. REST ist besonders gut geeignet, wenn Sie eine oeffentliche API mit einem breiten Oekosystem von Konsumenten bereitstellen, die Sie nicht kontrollieren.

// REST API — standard resource-oriented design
GET    /api/users           → List users
POST   /api/users           → Create user
GET    /api/users/:id       → Get user
PUT    /api/users/:id       → Replace user
PATCH  /api/users/:id       → Partial update
DELETE /api/users/:id       → Delete user

// Nested resources
GET    /api/users/:id/posts → User's posts
GET    /api/posts/:id/comments → Comments on a post

// Query parameters for filtering, sorting, pagination
GET /api/users?role=admin&status=active&page=2&limit=20&sort=name

// Response — standardized envelope
{
  "data": { ... },
  "meta": {
    "page": 2,
    "limit": 20,
    "total": 145,
    "totalPages": 8
  }
}

Die Prinzipien des REST-Designs sind einfach: Ressourcen sind Substantive (users, posts), HTTP-Methoden sind Verben (GET, POST, PUT, DELETE), und URLs identifizieren bestimmte Ressourcen oder Sammlungen. Aber die Einfachheit endet bei Verschachtelungstiefe und Ueberabruffehler. Wenn Sie Benutzer UND deren letzte Bestellung UND deren Adresse benoetigen, benoetigen Sie entweder mehrere REST-Aufrufe oder einen speziellen Endpunkt, der alles in einem bereitstellt.

Wann REST die richtige Wahl ist: Sie haben externe Konsumenten, die Sie nicht kontrollieren. Sie benoetigen HTTP-Caching (CDNs, Browser-Cache, Reverse-Proxies). Ihr API-Oberflaeche ist ressourcenzentriert und flach. Sie legen Wert auf Einfachheit und universelle Kompatibilitat gegenueber Abfrageflexibilitaet. Sie migrieren von einer bestehenden REST-API und inkrementelle Aenderungen sind wichtiger als ein Neuschreiben.

GraphQL: Frontend-Souveraenitaet

GraphQL loest das Problem, das REST nicht loesen kann: verschiedene Clients brauchen verschiedene Daten. Ein mobiler Client braucht vielleicht nur id und name eines Benutzers. Ein Dashboard braucht alle Felder plus verschachtelte Bestellungen. GraphQL ermoeglicht es dem Client, genau zu spezifizieren, was er benoetigt, und der Server liefert genau das - nicht mehr, nicht weniger. Dies macht GraphQL fuer jede Anwendung wertvoll, die mehrere Frontend-Clients mit unterschiedlichen Datenanforderungen bedient.

// GraphQL schema — strongly typed API contract
type Query {
  user(id: ID!): User
  users(filter: UserFilter, page: Int, limit: Int): UserConnection!
}

type User {
  id: ID!
  name: String!
  email: String!
  posts(limit: Int): [Post!]!
}

type Post {
  id: ID!
  title: String!
  comments: [Comment!]!
}

// Client query — ask for exactly what you need
query GetDashboardData($userId: ID!) {
  user(id: $userId) {
    name
    posts(limit: 5) {
      title
      comments {
        author
        body
      }
    }
  }
}

// Response — no over-fetching, no under-fetching
{
  "data": {
    "user": {
      "name": "Alice",
      "posts": [
        {
          "title": "GraphQL in production",
          "comments": [
            { "author": "Bob", "body": "Great article!" }
          ]
        }
      ]
    }
  }
}

Die Architektur von GraphQL erzwingt ein getyptes Schema als einzige Quelle der Wahrheit. Dieses Schema arbeitet als Vertrag zwischen Client und Server - beide Seiten werden gegen dasselbe Schema kompiliert oder validiert. Aenderungen am Schema können erkannt werden, bevor sie die Produktion erreichen. Die Entwicklererfahrung ist mit Werkzeugen wie GraphQL Code Generator, der TypeScript-Typen direkt aus dem Schema generiert, bemerkenswert gut.

Die Nachteile sind real. Caching ist auf HTTP-Ebene unmoeglich, weil alle Anfragen an einen einzigen Endpunkt gehen. Das Aufloesungs-N+1-Problem erfordert DataLoader oder aequivalentes Batching. Komplexe Abfragen koennen teuer sein, wenn Clients tiefe Verschachtelungen anfordern. Die Komplexitaet der Serverseite ist hoeher als bei REST - Sie brauchen Resolver, Typsysteme, Abfrageanalyse.

Verwenden Sie GraphQL, wenn: Sie mehrere Clients mit unterschiedlichen Datenanforderungen haben. Ihr Frontend-Team braucht die Freiheit, zu iterieren, ohne Backend-Aenderungen zu benoetigen. Die Unterabruffehler von REST in Ihrer Anwendung tatsaechlich ein Problem sind (und Sie gemessen haben, dass sie es sind). Sie bereit sind, in Serverseite zu investieren, um die Client-Erfahrung zu verbessern.

gRPC: Interne Leistung

gRPC ist fuer den Datenaustausch innerhalb eines Rechenzentrums optimiert. Es verwendet HTTP/2 fuer Multiplexing und Protobuf (Protocol Buffers) fuer eine kompakte, typsichere Serialisierung. Die Nutzlasten sind binaer, nicht JSON, was sie deutlich kleiner und schneller zu parsen macht. gRPC eignet sich hervorragend fuer Service-zu-Service-Kommunikation, bei der beide Seiten die Vertragssprache kontrollieren koennen.

// Protobuf definition — the contract
syntax = "proto3";

service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc ListUsers (ListUsersRequest) returns (stream User);  // server streaming
  rpc UpdateUser (stream UpdateUserRequest) returns (User); // client streaming
  rpc Chat (stream ChatMessage) returns (stream ChatMessage); // bidirectional
}

message GetUserRequest {
  string user_id = 1;
}

message User {
  string id = 1;
  string name = 2;
  string email = 3;
  repeated string roles = 4;
}

// Generated client code is typesafe and fast
const client = new UserServiceClient("localhost:50051");
const user = await client.getUser({ userId: "123" });

Protobuf hat gegenueber JSON mehrere Vorteile. Die Serialisierung ist strikt typisiert - es gibt kein Raten, ob ein Feld null, undefined oder ein leerer String ist. Die Nutzlasten sind 3-10x kleiner als aequivalentes JSON. Das Parsen ist wesentlich schneller, weil das Format weder geparst noch validiert werden muss. Die Streams von gRPC ermoeglichen Server-Push, Client-Push und bidirektionale Kommunikation mit einem einzigen, persistenten Verbindung.

  • gRPC glänzt in Microservice-Architekturen, in denen Latenz zwischen Diensten kritisch ist.
  • Protobuf-Schemata dienen als lebende Dokumentation, aus der automatisch Clients in jeder Sprache generiert werden.
  • gRPC-Streaming (> 20 Mbit/s) ist ein deutlicher Unterschied gegenuber REST/GraphQL fuer Echtzeit-Datenpipelines.

Der Kompromiss: gRPC ist ausserhalb Ihres Rechenzentrums schwer zu debuggen. Die Nutzlasten sind fuer Menschen nicht lesbar. Der Verbindungsaufbau ist komplexer. Browser muessen eine Proxy-Schicht (gRPC-Web) durchlaufen, um gRPC zu verwenden. Fuer oeffentliche APIs ist gRPC fast nie die richtige Wahl - dort gewinnen REST oder GraphQL.

Entscheidungsmatrix

In der Praxis verwenden die meisten Produktionssysteme mehr als einen API-Stil. Eine typische Architektur im Jahr 2026 koennte GraphQL fuer das Frontend, gRPC fuer den internen Service-Bus und REST fuer eine oeffentliche API verwenden. Der Schluessel ist der Uebergangspunkt - wo ein Stil endet und ein anderer beginnt - und eine klare Dokumentation darueber, welcher Stil wann verwendet werden soll.

Die besten API-Designs sind die, die den richtigen Stil fuer den Job waehlen, nicht die, die einen Stil fuer alles erzwingen. Heterogene API-Architekturen sind ein Zeichen von Reife, nicht von mangelnder Standardsierung.

Seien Sie pragmatisch. Wenn Ihr Team REST kann und Ihre Clients damit gluecklich sind, ist GraphQL kein Upgrade - es ist ein Trade. Wenn Ihre Microservices im einstelligen Millisekundenbereich kommunizieren muessen, ist gRPC keine Option - es ist eine Notwendigkeit. Wenn Ihre oeffentliche API auf der ganzen Welt gecacht werden muss, gewinnt REST. Messen Sie die Anforderungen, waehlen Sie den Stil und wissen Sie, dass Sie bei Bedarf spaeter jederzeit einen anderen hinzufuegen koennen.