{ }
type
GraphQL · OpenAPI · REST · API-Design · Architektur
OpenAPI vs. GraphQL
Wo beide Modelle sich sinnvoll ergänzen

Die Frage ist nicht "OpenAPI oder GraphQL?" — sie ist "Wofür eignet sich welches Modell, und wann macht es Sinn, beide im selben System zu betreiben?" Wer beide Modelle kennt und ihre Stärken versteht, trifft bessere API-Architekturentscheidungen.

13 Min. Lesezeit OpenAPI · GraphQL · REST · BFF · Schema-First Magento · Commerce · API-Design

1. Was OpenAPI und GraphQL grundlegend unterscheidet

OpenAPI (früher Swagger) ist eine Spezifikation für HTTP-basierte REST-APIs. Es beschreibt Endpunkte, HTTP-Methoden, Anfrage- und Antwort-Strukturen in YAML oder JSON. Das Design ist ressourcenorientiert: Ein Endpunkt repräsentiert eine Ressource, und HTTP-Verben (GET, POST, PUT, DELETE) definieren die Operationen darauf. Die Antwortstruktur ist fest — jeder Endpunkt gibt immer dieselben Felder zurück, unabhängig davon, welche der Client tatsächlich benötigt.

GraphQL ist eine Query-Sprache und eine Laufzeitumgebung für APIs. Es gibt genau einen Endpunkt, und der Client beschreibt präzise, welche Felder er benötigt. Das Design ist graphorientiert: Ressourcen sind Typen in einem Schema, und Beziehungen zwischen Typen werden im Schema explizit modelliert. Ein Client kann in einer einzigen GraphQL-Query Daten aus mehreren, miteinander verbundenen Typen abrufen — ohne mehrere HTTP-Requests senden zu müssen.

Beide Modelle haben ihre Berechtigung. OpenAPI ist seit Jahren der Standard für öffentliche APIs, Microservices und maschinenlesbare API-Dokumentation. GraphQL ist die bevorzugte Wahl für Frontend-getriebene APIs, wo die Flexibilität der Datenabfrage direkten Einfluss auf die Produktivität des Frontend-Teams hat. Die Entscheidung zwischen beiden hängt nicht von Vorlieben ab, sondern von konkreten Anforderungen.

2. Stärken von OpenAPI: Wann REST die bessere Wahl ist

OpenAPI ist dann die bessere Wahl, wenn die API öffentlich zugänglich ist und von Drittentwicklern konsumiert werden soll. REST-APIs mit OpenAPI-Dokumentation sind ein etablierter Standard — Entwickler kennen das Format, Tools zur Code-Generierung sind weit verbreitet, und die Lernkurve ist minimal. Ein GraphQL-Schema für externe Entwickler erfordert eine deutlich größere Einarbeitung in das Query-Sprache-Konzept und die Tooling-Infrastruktur.

OpenAPI ist außerdem die richtige Wahl für einfache CRUD-Operationen auf klar definierten Ressourcen. Wenn ein API-Endpunkt immer dieselben Felder zurückgibt und das Datenmodell stabil ist, bringt GraphQL's Flexibilität keinen Mehrwert — sie fügt aber Komplexität in Form von Resolver-Infrastruktur, Schema-Management und Query-Validation hinzu. File-Uploads, Webhook-Callbacks und einfache Status-Checks sind weitere Szenarien, in denen REST direkter und einfacher ist.

3. Stärken von GraphQL: Wann flexible Datenabfragen entscheiden

GraphQL ist dann überlegen, wenn der Client präzise kontrollierende muss, welche Daten er erhält. Das klassische Szenario: Ein mobiles App-Frontend benötigt für dieselbe Ansicht andere Felder als ein Desktop-Frontend. Mit OpenAPI würde entweder ein gemeinsamer Endpunkt Daten liefern, die das mobile Frontend nie verwendet (Overfetching), oder es müssten zwei separate Endpunkte gepflegt werden (Endpunkt-Proliferation). Mit GraphQL beschreibt jeder Client seine eigenen Datenanforderungen — ohne neue Endpunkte zu benötigen.

Ein weiteres Kernargument für GraphQL: stark vernetzte Daten. Wenn ein Client in einem Request Produkte, ihre Kategorien, ihre Hersteller und deren Bewertungen abrufen will, erfordert das mit REST vier separate API-Calls — oder einen spezialisierten Endpunkt, der genau diese Kombination zurückgibt. Mit GraphQL wird diese Kombination im Schema beschrieben und in einem einzigen Request aufgelöst. Das reduziert Round-Trips, verbessert die Startup-Performance mobiler Apps und vereinfacht die Frontend-Logik erheblich.


# GraphQL advantage: fetch exactly what you need in one request
# No over-fetching, no multiple round-trips
query ProductDetailPage {
  product(sku: "MH12-XS-Black") {
    sku
    name
    price_range {
      minimum_price {
        final_price { value currency }
      }
    }
    categories {
      name
      url_path
    }
    # REST equivalent would need: GET /products/:sku
    # + GET /products/:sku/categories
    # + separate manufacturer call
    manufacturer_label
    media_gallery {
      url
      label
    }
  }
}

# OpenAPI equivalent requires 3-4 separate HTTP calls
# or one highly specialized endpoint that's hard to reuse

4. Tooling-Ökosystem: OpenAPI vs. GraphQL im Vergleich

Beide Ökosysteme sind reif, aber in unterschiedlichen Bereichen stark. OpenAPI hat ein breites Tooling für Code-Generierung: Aus einer OpenAPI-Spezifikation lassen sich Client-Libraries für praktisch jede Sprache generieren, Mock-Server aufsetzen und umfassende API-Dokumentation (Swagger UI, Redoc) rendern. Das macht OpenAPI besonders wertvoll für B2B-Integrationsprojekte, wo Partnerfirmen Client-Code automatisch generieren wollen.

GraphQL's Tooling-Stärke liegt in der Entwicklererfahrung und der Schema-Evolution. GraphiQL und Altair ermöglichen interaktives Erkunden des Schemas ohne separate Dokumentation. GraphQL Inspector prüft Breaking Changes zwischen Schema-Versionen automatisch. Code-Generierung aus GraphQL-Schemas ist ebenfalls möglich (z.B. mit GraphQL Code Generator für TypeScript), aber weniger universell standardisiert als OpenAPI. Für Frontend-Teams, die eng mit einer GraphQL-API arbeiten, ist das Tooling aber oft leistungsfähiger als REST-Äquivalente.

5. Schema-Design: Wie Typen in beiden Modellen modelliert werden

Ein Blick auf das Schema-Design zeigt die konzeptionellen Unterschiede konkret. In OpenAPI wird eine Ressource als JSON-Schema-Komponente beschrieben, die in Anfrage- und Antwort-Bodies referenziert wird. Relationen zwischen Ressourcen sind implizit — ein Produkt enthält eine Kategorie-ID, aber die Kategorie-Struktur ist nicht direkt im Produkt-Schema enthalten. Der Client muss die Beziehung kennen und eine separate Anfrage für die Kategorie senden.

In GraphQL ist die Beziehung explizit im Typsystem modelliert: Das Produkt-Typ hat ein Feld categories vom Typ [Category]. Der Client kann diese Beziehung direkt in der Query traversieren — der Server löst die Relation über den zugehörigen Resolver auf. Das macht GraphQL-Schemas selbstdokumentierend bezüglich der Datenbeziehungen, erfordert aber eine sorgfältigere initiale Schema-Planung.


# GraphQL: explicit type relationships in schema
# Categories are a first-class field on the Product type
type Product {
  sku: String!
  name: String!
  categories: [Category]
  manufacturer: Manufacturer
}

type Category {
  id: Int!
  name: String!
  url_path: String!
  parent_category: Category   # recursive relationship possible
}

type Manufacturer {
  id: Int!
  name: String!
  country: String
}

# OpenAPI equivalent: product only contains IDs
# {
#   "sku": "MH12-XS-Black",
#   "category_ids": [3, 7, 12],
#   "manufacturer_id": 5
# }
# Client must make additional calls:
# GET /categories/3, GET /categories/7, GET /manufacturers/5

6. Direkter Vergleich: Entscheidungsmatrix für Architekten

Kriterium OpenAPI / REST GraphQL Empfehlung
Externe Partner-Integration Ideal (Standard, weit bekannt) Höhere Einstiegshürde OpenAPI
Frontend-getriebene Daten Overfetching oder viele Endpunkte Client bestimmt Felder GraphQL
File-Upload Nativ (multipart/form-data) Komplexe Spezifikation nötig OpenAPI
Stark vernetzte Daten Mehrere Round-Trips Eine Query, alle Relationen GraphQL
HTTP-Caching Native GET-Cache-Header Erfordert Persisted Queries OpenAPI bei GET-heavy

7. Hybride Architekturen: Wann beide Modelle koexistieren

In der Praxis schließen sich OpenAPI und GraphQL nicht aus — viele erfolgreiche Systeme nutzen beide Modelle für unterschiedliche Anwendungsfälle. Das häufigste hybride Muster: GraphQL für das Frontend-facing API, OpenAPI für Backoffice-Integrationen und Partner-APIs. Das Frontend profitiert von flexiblen Queries und einem einzigen Endpunkt. Partner-Systeme und interne Tools profitieren von stabilen, dokumentierten REST-Endpunkten mit einfacher Code-Generierung.

Ein weiteres Muster: BFF (Backend for Frontend) mit GraphQL vor mehreren OpenAPI-basierten Microservices. Der GraphQL-Layer aggregiert Daten aus verschiedenen Diensten und stellt dem Frontend eine einheitliche, flexible Abfrageschnittstelle bereit — während die Microservices untereinander weiterhin REST nutzen. Das kombiniert die Stärken beider Modelle: REST für Service-to-Service-Kommunikation, GraphQL für die Frontend-Schnittstelle.

8. Magento-Kontext: REST-API und GraphQL nebeneinander

Magento implementiert exakt dieses hybride Modell. Die REST-API (/rest/V1/) basiert auf Service Contracts und ist über OpenAPI-ähnliche Swagger-Dokumentation beschrieben. Sie ist für B2B-Integrationen, ERP-Anbindungen und Partner-Systeme gedacht. Die GraphQL-API (/graphql) ist für Headless-Frontends und PWA-Applikationen optimiert — mit flexiblen Produktabfragen, Cart-Operationen und Kundenkontext.

Beide APIs in Magento greifen auf dieselben Service Contracts zurück. Das ist der entscheidende Architekturvorteil: Die Fachlogik ist einmal implementiert, und beide API-Schichten sind nur Adapter. Ein Plugin auf einem Service Contract wirkt sich automatisch auf beide APIs aus. Wer eigene Magento-Module entwickelt, sollte dieselbe Philosophie verfolgen: Service Contracts als Kernschicht, GraphQL und REST als auswechselbare Transportschichten darüber.


# GraphQL: ideal for frontend — one query, complete page data
query CheckoutPage {
  cart(cart_id: "abc123") {
    items {
      uid
      quantity
      product {
        sku
        name
        thumbnail { url }
        price_range {
          minimum_price {
            final_price { value currency }
          }
        }
      }
    }
    prices {
      grand_total { value currency }
      subtotal_excluding_tax { value currency }
    }
    shipping_addresses {
      firstname
      lastname
      street
      city
      postcode
      country { code label }
      available_shipping_methods {
        method_code
        carrier_title
        amount { value currency }
      }
    }
  }
}

# REST equivalent would need: GET /cart + GET /cart/items
# + GET /cart/shipping-methods + GET /addresses
# = 4+ round trips vs. 1 GraphQL query

9. Typische Fehlentscheidungen bei der API-Modellwahl

Die häufigste Fehlentscheidung: GraphQL für interne Microservice-Kommunikation zu nutzen. Wenn zwei Backend-Dienste miteinander kommunizieren und der Datenaustausch fest definiert ist, bringt GraphQL's Flexibilität keinen Vorteil — aber die Komplexität eines GraphQL-Resolvers auf der Serverseite und die Schema-Pflege auf beiden Seiten sind echter Aufwand. Für Service-to-Service-Kommunikation sind REST mit OpenAPI oder gRPC bessere Entscheidungen.

Eine weitere Fehlentscheidung: OpenAPI für eine eng an das Frontend gekoppelte API zu wählen, und dann festzustellen, dass Mobile und Desktop unterschiedliche Datenformate brauchen. Statt das Problem zu lösen, werden spezialisierte Endpunkte gebaut — einer für Mobile, einer für Desktop, einer für das Widget. Das ist genau das Endpunkt-Proliferations-Problem, das GraphQL löst. Wer die API primär von einem Frontend konsumieren lässt, das unterschiedliche Datenanforderungen hat, sollte GraphQL von Anfang an einplanen.

10. Zusammenfassung

OpenAPI und GraphQL lösen unterschiedliche Probleme. OpenAPI ist der richtige Standard für öffentliche APIs, Partner-Integrationen und Systeme mit stabilen, ressourcenorientierten Datenmodellen. GraphQL ist die richtige Wahl für Frontend-getriebene APIs, stark vernetzte Daten und Szenarien, wo verschiedene Clients unterschiedliche Teilmengen derselben Daten benötigen. Beide Modelle schließen sich nicht aus — sie ergänzen sich in hybriden Architekturen, wo REST für Service-to-Service-Kommunikation und GraphQL für die Frontend-Schnittstelle genutzt wird.

Für Magento-Projekte bedeutet das: Die REST-API für ERP-Integrationen und Partner-Systeme nutzen, die GraphQL-API für Headless-Frontends. Beide APIs sind auf dieselben Service Contracts aufgebaut — die Fachlogik ist einmal implementiert, die API-Schicht ist auswechselbar. Das ist kein Kompromiss zwischen beiden Modellen, sondern die beste Nutzung ihrer jeweiligen Stärken.

OpenAPI vs. GraphQL — Das Wichtigste auf einen Blick

OpenAPI nutzen wenn

Externe Partner-APIs, ERP-Integrationen, stabile Ressourcen-Modelle, File-Uploads und weit verteilte Konsumenten.

GraphQL nutzen wenn

Frontend-getriebene Daten, stark vernetzte Typen, verschiedene Clients mit unterschiedlichen Datenanforderungen.

Hybrid-Muster

GraphQL als BFF vor OpenAPI-Microservices. REST für B2B, GraphQL für Headless-Frontend. Magento macht genau das.

Kern-Architektur

Service Contracts als neutrale Fachlogik. REST und GraphQL als Transportschichten darüber — beide greifen auf denselben Code zu.

11. FAQ: OpenAPI vs. GraphQL

1Muss ich mich zwischen OpenAPI und GraphQL entscheiden?
Nein. Viele Systeme nutzen beide — REST für Partner-Integrationen, GraphQL für Frontend-APIs. Magento macht genau das.
2Ist GraphQL immer besser als REST?
Nein. GraphQL ist besser für variable Datenanforderungen. REST ist besser für externe Partner, stabile CRUD-Ressourcen und File-Uploads.
3Warum hat Magento beide API-Modelle?
REST für ERP und Partner-Integrationen, GraphQL für Headless-Frontends. Beide bauen auf denselben Service Contracts auf.
4Was ist ein BFF?
Backend for Frontend: GraphQL als dedizierter Layer vor mehreren REST-Microservices — aggregiert Daten und bietet dem Frontend eine einheitliche Schnittstelle.
5GraphQL für externe Partner-APIs?
Mit Einschränkungen. Erfordert Einarbeitung in Query-Sprache und Tooling. Für breite externe Nutzung ist OpenAPI etablierter.
6HTTP-Caching mit GraphQL möglich?
Über Persisted Queries: Query-Hash statt Body, dann GET-Request möglich → normales HTTP-Caching. Standard-POST-Requests werden nicht gecacht.
7OpenAPI schlechter für Frontends?
Nicht automatisch. REST reicht für einfache Frontends. GraphQL bringt Mehrwert erst bei Over-Fetching, vielen Round-Trips und variablen Datenbedarfen.
8Wo ist GraphQL klar schlechter?
File-Uploads, Webhooks/Callbacks, Service-to-Service mit festem Modell und externe Entwickler ohne GraphQL-Kenntnisse.
9Was bedeutet Schema-First?
API-Schema vor der Implementierung definieren. OpenAPI: YAML-Datei. GraphQL: SDL-Datei. Beide ermöglichen Code-Generierung und frühe Tooling-Integration.
10Welches Modell eignet sich besser für Versionierung?
OpenAPI: URL-Pfade (/v1/, /v2/). GraphQL: Deprecation statt Versionen — Felder werden deprecated, nicht entfernt. Making Breaking Changes explizit.