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.
Inhaltsverzeichnis
- 1. Warum GraphQL-Tooling in der IDE entscheidend ist
- 2. GraphQL-Plugin installieren und konfigurieren
- 3. Schema per Introspection laden
- 4. Autovervollständigung und Inline-Validierung
- 5. HTTP-Client für GraphQL-Queries
- 6. Magento 2 GraphQL-API in PhpStorm
- 7. Fragments und gemeinsame Query-Bibliotheken
- 8. Eigene GraphQL-Typen für Magento-Module
- 9. Tooling-Vergleich: PhpStorm vs. Standalone-Clients
- 10. Zusammenfassung
- 11. FAQ
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.