IDE
{ }
PhpStorm · GraphQL · Magento 2 · API-Entwicklung
GraphQL-Tooling in PhpStorm:
Schema, HTTP-Client und Introspection

GraphQL-Queries ohne Schema-Autovervollständigung zu schreiben bedeutet, Feldnamen im Kopf zu behalten und Fehler erst zur Laufzeit zu sehen. PhpStorm mit dem GraphQL-Plugin validiert Queries statisch gegen das Schema, vervollständigt Felder und Argumente und ermöglicht HTTP-Requests direkt aus der IDE — ohne Postman oder das Browser-Devtool.

14 Min. Lesezeit GraphQL · Schema · Introspection · HTTP-Client · Magento 2 PhpStorm 2024.x · GraphQL-Plugin · Magento 2.4.x

1. Warum GraphQL-Tooling in der IDE entscheidend ist

GraphQL ist ein stark typisiertes Protokoll — jede Query, jede Mutation und jedes Subscription-Event hat eine exakte Typ-Signatur, die vom Schema definiert wird. Diese Typ-Information zur Entwicklungszeit verfügbar zu machen, ist der Kern des IDE-Vorteils. Wer eine products-Query gegen die Magento-GraphQL-API schreibt und nicht weiß, ob das Feld thumbnail innerhalb von small_image liegt oder direkt unter image, muss ohne Tooling raten, die Dokumentation aufschlagen oder einen Trial-Error-Zyklus starten.

Mit dem GraphQL-Plugin in PhpStorm erscheint die vollständige Feldliste mit Typen und Beschreibungen direkt als Autovervollständigung im Editor. Falsche Feldnamen werden sofort unterstrichen, fehlende Pflichtargumente als Fehler markiert, und der Typ eines Feldes ist per Hover sichtbar. Das reduziert den Kontextwechsel zwischen Dokumentation, Browser-Tool und IDE auf null — die gesamte Entwicklung bleibt in einer einzigen Umgebung.

Für Magento 2 ist das besonders relevant: Die Magento-GraphQL-API hat ein sehr umfangreiches Schema mit hunderten von Typen, verschachtelten Strukturen und modulabhängigen Felderweiterungen. Ohne Autovervollständigung ist das Navigieren durch dieses Schema zeitaufwendig und fehleranfällig. Das GraphQL-Plugin macht die gesamte API-Oberfläche direkt im Editor zugänglich.

2. GraphQL-Plugin installieren und konfigurieren

Das GraphQL-Plugin ist in PhpStorm 2023.x und neuer standardmäßig gebündelt. Bei älteren Versionen findet man es über Settings → Plugins → Marketplace mit dem Suchbegriff "GraphQL". Nach der Installation muss eine Konfigurationsdatei .graphqlconfig oder graphql.config.yml im Projektstamm angelegt werden, die dem Plugin mitteilt, wo das Schema zu finden ist — entweder als lokale SDL-Datei oder als URL für Introspection.

Die Konfiguration für ein Magento-Projekt sieht in der Regel so aus: Die Schema-URL verweist auf den lokalen Entwicklungsserver (http://localhost/graphql), die Introspection wird mit einem optionalen Bearer-Token authentifiziert, und die Dateimuster legen fest, welche .graphql- und .gql-Dateien im Projekt als GraphQL erkannt werden sollen. PhpStorm zeigt im Editor-Status-Bar an, ob das Schema erfolgreich geladen wurde und wann es zuletzt aktualisiert wurde.

3. Schema per Introspection laden

Introspection ist das Mechanismus, mit dem GraphQL-Clients das vollständige Schema eines Servers abfragen können — einschließlich aller Typen, Felder, Argumente und Beschreibungen. PhpStorm nutzt diese Funktion, um das Schema automatisch aus dem laufenden Magento-Server zu laden, ohne dass eine separate SDL-Datei manuell gepflegt werden muss. Der Vorteil: Das Schema im Editor ist immer identisch mit dem, was der Server tatsächlich anbietet — einschließlich aller modulspezifischen Erweiterungen.

Nach dem Laden des Schemas per Introspection speichert PhpStorm es lokal im Projekt. So ist die Autovervollständigung auch ohne laufenden Server verfügbar — etwa beim Schreiben von Queries im Offline-Modus oder in der CI-Pipeline. Bei Schema-Änderungen (z.B. nach der Installation eines neuen Magento-Moduls, das die GraphQL-API erweitert) kann das Schema mit einem Klick auf "Refresh Schema" neu geladen werden.


# graphql.config.yml — PhpStorm GraphQL configuration for Magento 2
# Place in project root alongside composer.json

schema:
  - ./src/vendor/magento/module-catalog-graph-ql/etc/schema.graphqls
  - ./src/app/code/**/*.graphqls

documents:
  - ./src/app/design/**/*.graphql
  - ./src/app/code/**/*.graphql

extensions:
  endpoints:
    local:
      url: http://magento.local/graphql
      headers:
        Content-Type: application/json
        Authorization: "Bearer ${MAGENTO_ADMIN_TOKEN}"
    staging:
      url: https://staging.mironsoft.de/graphql
      headers:
        Content-Type: application/json
        Authorization: "Bearer ${STAGING_ADMIN_TOKEN}"

4. Autovervollständigung und Inline-Validierung

Sobald das Schema geladen ist, aktiviert sich die Autovervollständigung in .graphql-Dateien. Beim Tippen eines Feldnamens erscheint eine Dropdown-Liste aller verfügbaren Felder des aktuellen Typs — mit Typannotation und der Beschreibung aus dem Schema. Argumente werden ebenfalls vervollständigt, inklusive ihrer Pflicht- oder Optionalstatus und erlaubten Werte bei Enum-Typen. Das Navigieren zwischen verschachtelten Typen funktioniert mit Strg+Klick auf jeden Typnamen — PhpStorm springt direkt zur Typdefinition in der SDL-Datei.

Die Inline-Validierung prüft in Echtzeit: Felder, die im Schema nicht existieren, werden mit roter Unterstreichung markiert. Fehlende Pflichtargumente zeigen eine Warnung. Typfehler — etwa wenn ein String-Argument einen Int-Wert erhält — sind sofort sichtbar. Diese statische Analyse fängt die häufigsten GraphQL-Fehler ab, bevor die Query überhaupt an den Server gesendet wird, und spart den vollständigen Request-Response-Zyklus für jede Tippvariante.

5. HTTP-Client für GraphQL-Queries

PhpStorms eingebauter HTTP-Client unterstützt nativ GraphQL — keine externe Anwendung wie Postman oder Insomnia nötig. In einer .http-Datei lässt sich eine GraphQL-Query mit dem Content-Type application/json und dem JSON-Body direkt ausführen. Das Ergebnis erscheint im selben Editor-Fenster, formatiert als aufklappbarer JSON-Baum.

Der Vorteil gegenüber externen Tools: Die .http-Dateien werden versioniert und liegen im Repository. Das gesamte Team teilt dieselben Test-Queries, Mutations und Variablen. Umgebungsvariablen (Tokens, Basis-URLs) sind in .env-Dateien gespeichert und werden beim Request automatisch eingesetzt. So ist das Testen einer Magento-GraphQL-Mutation mit realen Testdaten in 30 Sekunden möglich, ohne die IDE zu verlassen oder eine separate Konfiguration zu pflegen.


### Magento 2 GraphQL — Product Query
### File: tests/graphql/product-queries.http
### Variables loaded from: http-client.env.json

POST {{magento_base_url}}/graphql
Content-Type: application/json

{
  "query": "query GetProduct($sku: String!) { products(filter: { sku: { eq: $sku } }) { items { id name sku price_range { minimum_price { regular_price { value currency } } } small_image { url label } } } }",
  "variables": {
    "sku": "TEST-SKU-001"
  }
}

###

### Magento 2 GraphQL — Customer Login Mutation
POST {{magento_base_url}}/graphql
Content-Type: application/json

{
  "query": "mutation GenerateCustomerToken($email: String!, $password: String!) { generateCustomerToken(email: $email, password: $password) { token } }",
  "variables": {
    "email": "test@example.com",
    "password": "{{customer_password}}"
  }
}

6. Magento 2 GraphQL-API in PhpStorm

Die Magento 2 GraphQL-API definiert ihr Schema in .graphqls-Dateien innerhalb jedes Moduls — unter etc/schema.graphqls. PhpStorm erkennt diese Dateien automatisch, wenn das GraphQL-Plugin konfiguriert ist. So ist das vollständige Magento-Schema in der Autovervollständigung verfügbar — einschließlich der Felder, die von installierten Drittanbieter-Modulen hinzugefügt wurden.

Für die Entwicklung eigener GraphQL-Resolver in Magento bedeutet das: Wenn man eine schema.graphqls für ein eigenes Modul schreibt, validiert PhpStorm sofort, ob die referenzierten Typen im Schema existieren, ob die Resolver-Klassen den korrekten Interface-Namen tragen und ob die Feldtypen konsistent sind. Das reduziert die häufige Fehlerquelle, bei der ein Schema definiert wird, das mit dem tatsächlichen Resolver-Return-Typ nicht übereinstimmt.

7. Fragments und gemeinsame Query-Bibliotheken

GraphQL-Fragments ermöglichen die Wiederverwendung von Feldauswahlen über mehrere Queries hinweg. In größeren Projekten entstehen schnell Dutzende von Queries mit identischen Strukturen — etwa immer derselbe ProductFragment mit den Feldern für Bild, Preis und SKU. PhpStorm erkennt Fragment-Definitionen und vervollständigt Fragment-Referenzen (...FragmentName) mit einer Liste der verfügbaren, typkompatiblen Fragments.

Für Team-Projekte empfiehlt sich eine dedizierte Verzeichnisstruktur für GraphQL-Dateien: src/graphql/queries/, src/graphql/mutations/, src/graphql/fragments/. PhpStorm zeigt bei Strg+Klick auf einen Fragment-Namen die Definition an — egal in welcher Datei sie liegt. Das "Find Usages" (Alt+F7) zeigt alle Stellen, an denen ein Fragment verwendet wird, was Refactorings erheblich sicherer macht.


# src/graphql/fragments/ProductPrice.graphql
# Shared fragment — PhpStorm tracks all usages with Alt+F7

fragment ProductPrice on ProductInterface {
  price_range {
    minimum_price {
      regular_price {
        value
        currency
      }
      final_price {
        value
        currency
      }
      discount {
        amount_off
        percent_off
      }
    }
  }
}

# src/graphql/queries/ProductListing.graphql
# PhpStorm autocompletes fragment name, validates type compatibility

query GetProductListing($categoryId: String!, $pageSize: Int = 12) {
  products(
    filter: { category_id: { eq: $categoryId } }
    pageSize: $pageSize
  ) {
    total_count
    items {
      id
      name
      sku
      url_key
      ...ProductPrice
      small_image {
        url
        label
      }
    }
  }
}

8. Eigene GraphQL-Typen für Magento-Module

Wenn ein eigenes Magento-Modul die GraphQL-API erweitert, beginnt die Arbeit mit der schema.graphqls-Datei. PhpStorm validiert diese Datei gegen das Basis-Schema und zeigt sofort, wenn ein Typ erweitert wird (type Query @resolver), der im Schema nicht existiert, oder wenn ein referenzierter Return-Type nicht definiert ist. Das erspart einen vollständigen Magento-Deploy mit anschließendem Schema-Validierungsfehler.

Die Resolver-Klasse, die in schema.graphqls über die @resolver-Direktive referenziert wird, muss das ResolverInterface aus Magento\Framework\GraphQl\Query\ResolverInterface implementieren. PhpStorm springt mit Strg+Klick auf den Klassenamen in der GraphQL-Datei direkt zur PHP-Klasse — wenn die Konfiguration korrekt ist. Diese Navigation macht den Entwicklungszyklus zwischen Schema-Definition und Resolver-Implementierung erheblich schneller.

9. Tooling-Vergleich: PhpStorm vs. Standalone-Clients

Für die tägliche GraphQL-Entwicklung in einem PHP-Projekt bietet die PhpStorm-Integration klare Vorteile gegenüber externen Tools wie GraphiQL, Altair oder Postman — aber auch spezifische Einschränkungen, die den Einsatz externer Tools in manchen Szenarien rechtfertigen.

Feature PhpStorm GraphiQL / Altair Postman
Schema-Autovervollständigung Vollständig, offline Online-Introspection Begrenzt
Query-Versionierung .http und .graphql in Git Nicht nativ Collections exportierbar
Inline-PHP-Navigation Strg+Klick zu Resolver-Klassen Nicht verfügbar Nicht verfügbar
Interaktive Exploration Möglich, aber weniger visuell Optimal für Exploration Gut
Team-Sharing Dateien im Repository Manuell Workspace-Sync

Die sinnvollste Kombination in der Praxis: PhpStorm für die tägliche Entwicklung mit Schema-Autovervollständigung, Inline-Validierung und versionierten HTTP-Requests. GraphiQL oder Altair für die initiale Exploration eines unbekannten Schemas, bei dem die visuelle Dokumentations-Navigation hilfreich ist. Postman für Team-übergreifendes Sharing von API-Tests mit Nicht-Entwicklern.

Mironsoft

Magento 2, GraphQL-API-Entwicklung und PHP-Beratung

GraphQL-APIs für euer Magento-Projekt aufbauen?

Wir entwickeln GraphQL-Resolver, Schema-Erweiterungen und API-Integrationen für Magento 2 — mit vollständiger PhpStorm-Integration, Typsicherheit und automatisierten Tests.

Schema-Design

Typsichere GraphQL-Schemas für Magento-Module mit vollständiger Dokumentation und Validierung

Resolver-Entwicklung

PHP-Resolver-Klassen mit Performance-Optimierung, Caching und Fehlerbehandlung nach Magento-Standards

API-Integration

Headless-Frontends, PWA-Anbindungen und Third-Party-GraphQL-APIs in Magento integrieren

10. Zusammenfassung

Das GraphQL-Tooling in PhpStorm transformiert die API-Entwicklung von einem trial-and-error-Prozess zu einem typsicheren, validierungsgestützten Workflow. Schema-Autovervollständigung, Inline-Fehleranzeige und Introspection direkt aus dem laufenden Magento-Server machen das komplexe Magento-GraphQL-Schema beherrschbar. Der eingebaute HTTP-Client mit versionierten .http-Dateien ersetzt externe Tools für den täglichen Testbedarf.

Für Teams, die Magento-Module mit eigenen GraphQL-Erweiterungen entwickeln, bringt die IDE-Integration einen konkreten Qualitätsvorteil: Schema-Fehler werden vor dem Deploy erkannt, nicht danach. Die Navigation von der Schema-Direktive zur Resolver-Klasse macht den Entwicklungszyklus schneller und weniger fehleranfällig. Fragment-Bibliotheken, die im Repository versioniert sind und von PhpStorm mit Find-Usages verwaltet werden, machen Refactorings sicher.

GraphQL-Tooling in PhpStorm — Das Wichtigste auf einen Blick

Schema-Setup

graphql.config.yml im Projektstamm mit Schema-URL für Introspection. PhpStorm speichert Schema lokal — Autovervollständigung auch offline verfügbar.

HTTP-Client

.http-Dateien für GraphQL-Queries und Mutations — versioniert im Repository, Umgebungsvariablen aus http-client.env.json, Ergebnis direkt im Editor.

Magento-Integration

schema.graphqls-Dateien in Modulen werden automatisch erkannt. Strg+Klick auf @resolver-Klassenname springt direkt zur PHP-Resolver-Klasse.

Fragment-Bibliotheken

Fragment-Definitionen in separaten .graphql-Dateien. Alt+F7 zeigt alle Verwendungen. Strg+Klick navigiert zur Definition. Typenkompatibilität wird validiert.

11. FAQ: GraphQL-Tooling in PhpStorm

1Ist das GraphQL-Plugin kostenlos?
In PhpStorm 2023.x und neuer standardmäßig integriert. Bei älteren Versionen über den Plugin-Marketplace kostenlos installierbar.
2Wie lade ich das Magento-Schema in PhpStorm?
graphql.config.yml mit Introspection-URL anlegen. PhpStorm lädt per Introspection und speichert lokal — Autovervollständigung dann auch offline verfügbar.
3Queries ohne laufenden Server möglich?
Ja — PhpStorm speichert das Schema lokal nach der ersten Introspection. Completion und Validierung laufen offline. Nur Query-Ausführung benötigt den Server.
4Wie funktioniert der HTTP-Client für GraphQL?
.http-Datei mit POST-Request, Content-Type application/json, GraphQL-Query als JSON-Body. Strg+Enter führt aus — Ergebnis erscheint direkt formatiert im Editor.
5Navigation von schema.graphqls zur PHP-Klasse?
Strg+Klick auf den Klassenamen in @resolver(class="...") springt direkt zur PHP-Resolver-Klasse — vorausgesetzt Autoloading ist korrekt konfiguriert.
6Wie teile ich Queries mit dem Team?
.http- und .graphql-Dateien im Repository versionieren. Alle haben dieselben Queries. Secrets in http-client.private.env.json (nicht versioniert) speichern.
7Werden Fragment-Referenzen validiert?
Ja — PhpStorm prüft ob Fragment definiert ist und ob der Typ kompatibel ist. Fehlende Definitionen werden als Fehler markiert. Alt+F7 zeigt alle Verwendungen.
8Eigene Magento-Schemas werden erkannt?
Ja — Glob-Muster für alle schema.graphqls in graphql.config.yml eintragen. PhpStorm kombiniert alle gefundenen Schema-Dateien zum Gesamt-Schema.
9Wie authentifiziere ich Requests?
Bearer-Token in .http-Datei als Header. Secrets in http-client.private.env.json (nicht versioniert) — PhpStorm setzt sie automatisch als Variablen ein.
10Auch für nicht-Magento-APIs geeignet?
Vollständig — GitHub, Shopify, Contentful und alle GraphQL-APIs mit Introspection-Support funktionieren. Mehrere Endpoints in graphql.config.yml konfigurierbar.