Hinweis: Der folgende Artikel hilft Ihnen dabei: So erstellen und verwenden Sie benutzerdefiniertes GraphQL in Magento …
Magento 2 ist eine leistungsstarke E-Commerce-Plattform mit sofort einsatzbereiten Funktionen. Es kann jedoch vorkommen, dass Sie die Plattform erweitern müssen, um bestimmte Geschäftsanforderungen zu erfüllen. Hier kommt benutzerdefiniertes GraphQL ins Spiel!
Wenn Sie mit GraphQL nicht vertraut sind: Es handelt sich um eine Abfragesprache für APIs, die von Facebook (jetzt Meta) entwickelt wurde. Es ermöglicht Entwicklern, die benötigten Daten abzurufen und diese nur als Antwort auf ihre Anfragen zu erhalten. Magento 2 unterstützt GraphQL, um Ihnen bei der Optimierung Ihrer Datenprozesse zu helfen.
In diesem Artikel erkläre ich Ihnen, wie Sie GraphQL in Magento 2 verwenden. Ich beginne damit, das GraphQL-Modul in Magento 2 zu aktivieren und auf den GraphQL-Endpunkt zuzugreifen und dann GraphQL-Abfragen durchzuführen, um Daten über Produkte, Kategorien, Kunden usw. abzurufen. Bestellungen usw.
Ein Überblick über GraphQL in Magento 2
GraphQL ist eine Alternative zu REST und SOAP in Magento 2. Es ermöglicht Ihnen, die Daten einfach anzugeben und zu empfangen, wodurch API-Antworten effizienter werden und der Netzwerk-Overhead reduziert wird. Ein einfaches Beispiel ist Progressive Web-App (PWA) mit clientseitigem Rendering.
In Magento 2 ist GraphQL eine neue Funktion in Version 2.3.4 hinzugefügt. Das Hauptaugenmerk liegt auf der Beschleunigung und Steigerung der APIs, ihrer Flexibilität und ihrer Effektivität. Es ermöglicht Entwicklern, Daten in der Magento-Datenbank mithilfe einer standardisierten Syntax abzufragen und zu ändern.
Drei Hauptoperationen von GraphQL werden verwendet:
- Abfragen (zum Lesen und Empfangen von Informationen);
- Mutationen (wird benötigt, um Maßnahmen zu ergreifen, Daten zu erstellen und Informationen zu ändern. Zum Beispiel die E-Mail-Adresse eines Kunden);
- Abonnements (Dieser Vorgang ist in Magento noch nicht verfügbar, bietet aber die Möglichkeit, nach einer Weile automatisch Daten vom Server in Echtzeit abzurufen, beispielsweise für Benachrichtigungen).
Verbesserungen von GraphQL in Magento 2.4.6
In Adobe Commerce 2.4.6Durch das Hinzufügen von Genehmigungsregeln in der API wurde die Funktionalität für Bestellungen auch in der GraphQL-Ebene vollständig verfügbar gemacht.
Ladenbesitzer und Händler werden aufgrund des verbesserten Rendering-Prozesses des Kategoriebaums erhebliche Leistungsverbesserungen erzielen Magento Open Source 2.4.6.
Das Laden untergeordneter Kategorien durch Refactoring-Code wurde verbessert, indem unnötige Methodenaufrufe entfernt, das Caching von Kategoriebäumen verbessert und Kategoriedaten rekursiv geladen wurden.
Außerdem wurden die Vorgänge bei Masseneinkaufswagen hinsichtlich der Reaktionszeiten bei Abfragen verbessert, insbesondere in Situationen, in denen 500 oder mehr Produkte zum Einkaufswagen hinzugefügt wurden.
Warum ist GraphQL für Entwickler nützlich?
GraphQL ist aus folgenden Gründen für Magento 2-Entwickler nützlich.
- Entwickler können nur die Daten anfordern, die sie benötigen, was zu kleineren und effizienteren Datenübertragungen führt. Dies ist besonders wichtig für mobile Geräte und Geräte mit geringer Bandbreite.
- Es bietet ein flexibles Datenmodell, das es Entwicklern ermöglicht, Daten natürlicher und intuitiver abzufragen. Dies erleichtert die Erstellung komplexer datengesteuerter Anwendungen.
- Es verfügt über eine einfache und intuitive Syntax, die es Entwicklern leicht macht, es zu erlernen und zu verwenden. Diese Einfachheit verkürzt den Lernaufwand und ermöglicht es Entwicklern, sich auf die Entwicklung ihrer Anwendungen zu konzentrieren.
- Entwickler können benutzerdefinierte GraphQL-Abfragen, Mutationen und Typen erstellen und so das Standardschema der Plattform erweitern und benutzerdefinierte Funktionen erstellen, die ihren spezifischen Anforderungen entsprechen.
- Es ermöglicht optimierte Abfragen, die die Anwendungsleistung erheblich verbessern können. Dies liegt daran, dass dadurch die Anzahl der zum Abrufen von Daten erforderlichen API-Anfragen reduziert wird.
Lassen Sie nicht zu, dass veraltete APIs Ihren Magento-Shop behindern!
Melden Sie sich bei DreamHost an und erleben Sie die Leistungsfähigkeit eines schnelleren und effizienteren Datenabrufs mit GraphQL.
Vergleichen Sie GraphQL mit der Rest-API
Mit dem Aufkommen der PWA müssen kleinere Datenmengen abgerufen und weniger API-Anfragen gestellt werden. Es kommt die fortschrittliche Technologie und der Bedarf an GraphQL. Magento 2 unterstützt sowohl GraphQL- als auch REST-APIs für die Interaktion mit der Plattform.
Hier sind einige der wichtigsten Unterschiede zwischen REST API und GraphQL.
REST-API | GraphQL | |
Abfragen | Bei REST-APIs stellen Sie normalerweise separate Anforderungen für jede Ressource oder den Endpunkt, auf den Sie zugreifen möchten. | Mit GraphQL können Sie alle benötigten Daten in einer einzigen Anfrage abrufen und angeben, welche Felder und Daten Sie benötigen. |
Caching | REST-APIs lassen sich oft einfacher zwischenspeichern als GraphQL, da die URLs als Cache-Schlüssel verwendet werden. | Bei GraphQL kann das Caching eine größere Herausforderung darstellen, da jede Anfrage einzigartig ist und möglicherweise einen anderen Datensatz erfordert. |
Lernkurve | REST-APIs sind einfacher zu verstehen und zu verwenden und es steht eine Fülle von Dokumentationen und Tools zur Verfügung. | GraphQL hat eine steilere Lernkurve und es kann länger dauern, sich mit der Technologie vertraut zu machen. |
Leistung | REST-APIs können schneller sein, wenn nur eine kleine Datenmenge erforderlich ist. | GraphQL kann in einigen Anwendungsfällen effizienter sein als REST-APIs, da es das Über- und Unterabrufen von Daten reduziert. |
Darüber hinaus kann man feststellen, dass GraphQL-Einbindungen ratenbegrenzende und andere Sicherheitsmaßnahmen zur Dienstverweigerung durchführen.
Obwohl die Wahl zwischen GraphQL oder REST API in Magento 2 völlig subjektiv ist und auf den Anforderungen der Website basiert. Aber der wichtigste Punkt, den es zu beachten gilt, ist, dass, wenn es um Sicherheit geht – RestAPI bietet viele integrierte Möglichkeiten, die Sicherheit Ihrer APIs durchzusetzen.
Anforderungen für GraphQL in Magento 2
Sie benötigen eine GraphQL-IDE wie z GraphiQL oder eine Browsererweiterung zum Ausführen der Codebeispiele und Tutorials. Wenn Sie eine Browsererweiterung installieren, stellen Sie sicher, dass diese Anforderungsheader festlegen kann. Altair GraphQL-Client ist eine der Erweiterungen im Chrome Web Store, die diese Aufgabe erfüllen kann.
Greifen Sie in Magento 2 auf den GraphQL-Endpunkt zu
Der GraphQL-Endpunkt in Magento 2 ist /graphql. Um auf die GraphQL-URL zuzugreifen, legen Sie den GraphQL-Endpunkt durch Eingabe fest http://
Beispiel: Anfrageanfrage
Länder available_regions Code-ID-Name full_name_locale full_name_english id two_letter_abbreviation three_letter_abbreviation
Antwort: Gibt die Liste aller Länder zurück
Führen Sie GraphQL-Anfragen in Magento 2 aus
Wenn Sie eine GraphQL-Anfrage in Magento stellen, unterstützt die Anfrage die HTTP-Methoden GET und POST. Mutationsanfragen sollten nur in der POST-Methode erfolgen. Sie können optional eine GET-Abfrageanforderung in einer URL senden.
Zum Beispiel, http://
Anfrage
Produkte( Filter: SKU: Gl.: „24-WB01“ ) Artikel Name SKU
Antwort
“data”: “products”: “items”: [
“name”: “Voyage Yoga Bag”,
“sku”: “24-WB01”
]
Erstellen Sie benutzerdefiniertes GraphQL in Magento 2
Es ist wichtig zu beachten, dass die Erstellung eines neuen Moduls mit einem GraphQL-Endpunkt in Magento 2 ein gutes Verständnis der GraphQL-Syntax sowie der Magento 2-Plattform erfordert. Bitte befolgen Sie die folgenden Schritte, um ein GraphQL-Modul in Magento 2 zu erstellen.
Erstellen Sie einen Ordner DreamHost/Graphql im Verzeichnis App/Code.
Schritt 1: Erstellen Sie eine Registration.php-Datei
Ein … kreieren Registration.php Datei in app/code/DreamHost/Graphql/registrattion.php.
Schritt 2: Erstellen Sie eine etc/module.xml-Datei
Erstelle eine neue module.xml Datei in der usw Verzeichnis. Diese Datei sollte die grundlegenden Informationen zu Ihrem Modul definieren, wie z. B. Name, Version und Abhängigkeiten. Hier ist ein Beispiel für a module.xml Datei.
Schritt 3: Definieren Sie das GraphQL-Schema
Ein GraphQL-Schema definiert die Typen, Abfragen und Mutationen, die Ihre API unterstützt.
Als nächstes erstellen Sie eine Datei in app/code/DreamHost/Graphql/etc/schema.graphls Verzeichnis wie im Beispiel unten. Notiere dass der etc/schema.graphqls Teil ist Pflicht.
Der
- Definiert die Grundstruktur von Abfragen und Mutationen.
- Definiert, welche Attribute für die Eingabe und Ausgabe in GraphQL-Abfragen und -Mutationen verwendet werden können.
- Anfragen und Antworten enthalten separate Listen gültiger Funktionen.
- Verweist auf die Resolver, die die Eingabedaten und Antworten überprüfen und verarbeiten.
- Ist die Quelle für die Anzeige des Schemas in einem GraphQL-Browser.
- Definiert, welche Objekte zwischengespeichert werden.
Kopieren Sie den folgenden Code:
type Query products ( search: String filter: ProductAttributeFilterInput pageSize: Int = 20 currentPage: Int = 1 sort: ProductAttributeSortInput ) : Products @resolver(class: “DreamHost\\Graphql\\Model\\Resolver\\Products”) @cache (cacheIdentity: “DreamHost\\Graphql\\Model\\Resolver\\Block\\Identity”) input ProductAttributeFilterInput Category_id: FilterEqualTypeInput type SearchResultPageInfo page_size: Int current_page: Int total_pages: Int
Abfrage definieren
Eine Abfragedefinition besteht aus einer Zeile oder kann komplex sein. Der Typ ist als Abfrage definiert. Oben verwenden wir die Produkte Objekt, das als Abfragename definiert ist und die Schlüsselwörter definiert, die zum Erstellen einer Abfrage verwendet werden.
Sie können Ihre benutzerdefinierte Abfrage wie folgt erstellen:
type Query myCustomQuery(input: MyCustomInput!): MyCustomOutput @resolver(class: “Vendor\\Module\\Model\\Resolver\\MyCustomQuery”)
Beispiel
Typ Query hello: String
Eingabeparameter definieren
In der GraphQL-Abfrage umfasst jede Typdefinition alle Eingabe-, Ausgabe- und Sortierattribute eines Objekts. Sie können jedes Attribut definieren, das als Eingabe zum Ausführen von Moduloperationen verwendet werden kann.
Im obigen Code ist die ProductAttributeFilterInput Das Objekt wird als zu filterndes Eingabeattribut verwendet.
Eingabe ProductAttributeFilterInput Kategorie-ID: FilterEqualTypeInput
Ebenso die FilterEqualTypeInput Das Objekt definiert einen Filter, der genau mit der Eingabe übereinstimmt.
Eingabe FilterEqualTypeInput in: [String]
eq: String
Ergebnisse
Das folgende Beispiel filtert und führt zur Suche nach Produkten, deren Kategorie ID gleich 1.
products(filter: category_id: eq: “1”) total_count items name
Geben Sie Ausgabeattribute an
Die API-Antwort ermöglicht es Entwicklern, eine benutzerdefinierte App oder Integration zu erstellen, aber manchmal wird nicht erwartet, dass sie die benutzerdefinierte Antwort erhalten. Wenn Sie beispielsweise in einem Eingabefilter einen Preis angeben, wertet Magento diesen als Float-Wert.
In einem schema.graphqls Datei definiert die Ausgabeschnittstelle Attribute der obersten Ebene. Der Datentyp jedes Attributs muss angegeben werden, unabhängig davon, ob es sich um einen Skalar, ein Objekt oder ein Array handelt.
Im obigen Code verwenden wir die Produktabfrage. Der Seiteninfo Attribut enthält die SearchResultPageInfo Datentyp, der im definiert ist schema.graphqls Datei unter ModuleGraphQL.
SearchResultPageInfo bietet Navigation für die Abfrageantwort.
Typ SearchResultPageInfo page_size: Int current_page: Int total_pages: Int
Anmerkungen definieren
Sie können jedes Attribut, jede Typdefinition oder jede Entität innerhalb eines beschreiben schema.graphqls Datei, indem Sie Folgendes an die Zeile anhängen:
@doc(Beschreibung: „
Beispiel
Artikelnummer: FilterTypeInput @doc(description – Eine einem Produkt zugewiesene Nummer oder ein Code zur Identifizierung des Produkts, der Optionen, des Preises usw.).
Schritt 4: Abfrage-Caching
Der @Zwischenspeicher Die Direktive definiert, ob die Ergebnisse bestimmter Abfragen zwischengespeichert werden können. Anfragen zu Produkten, Kategorien und CMS können zwischengespeichert werden.
Definieren Sie zwischenspeicherbare Abfragen auf folgende Weise:
@cache(cacheIdentity: „DreamHost\\Graphql\\Model\\Resolver\\Block\\Identity“).
Der Cache-Identitätswert verweist auf die Klasse, die für das Abrufen von Cache-Tags verantwortlich ist. Eine Abfrage ohne Cache-Identität wird nicht zwischengespeichert.
Erstellen Sie die Datei in DreamHost/Graphql/Model/Resolver/Block/Identity.php und kopieren Sie den folgenden Code:
Schritt 5: Definieren Sie den Schema-Resolver
Resolver sind für die Bearbeitung von Abfragen und Mutationen verantwortlich. In Magento 2 werden Resolver als PHP-Klassen definiert. Sie können Ihre Resolver in einem separaten Verzeichnis definieren, z Modell/Resolver.
Erstellen Sie eine Datei in DreamHost/Graphql/Model/Resolver/Products.php und kopieren Sie den folgenden Code:
productRepository = $productRepository; $this->searchCriteriaBuilder = $searchCriteriaBuilder; öffentliche Funktion discover(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) $productsData = $this->getProductsData(); return $productsData; /** * @return array * @throws GraphQlNoSuchEntityException */ private function getProductsData(): array try /* Filter für alle Seiten */ $searchCriteria = $this->searchCriteriaBuilder->create(); $products = $this->productRepository->getList($searchCriteria)->getItems(); $productId = $product->getId(); foreach($products as $product) $productRecord[‘allProducts’][$productId][‘sku’] = $product->getSku(); $productRecord[‘allProducts’][$productId][‘name’] = $product->getName(); $productRecord[‘allProducts’][$productId][‘price’] = $product->getPrice(); Catch (NoSuchEntityException $e) throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); return $productRecord;
Schritt 6: Führen Sie die Befehle aus
Führen Sie die folgenden Befehle im Stammverzeichnis Ihrer Magento 2-Instanz aus, um Ihr Modul zu aktivieren und den Cache zu leeren:
bin/magento-Modul: DreamHost_Graphql aktivieren bin/magento-Setup: aktualisieren bin/magento-Setup: di: kompilieren bin/magento-Cache: bereinigen
Schritt 7: Testen Sie die Graphql-Abfrage und führen Sie sie aus
Der letzte Schritt besteht darin, sicherzustellen, dass die Anfrage fehlerfrei ist und die richtigen Antworten liefert. Eine der vielen leicht verfügbaren Erweiterungen, wie z ChromeiQl, GraphiQLoder Altair GraphQL-Clientkann dies tun.
Nutzlast anfordern
Produkte ( Suche: „A“ Seitengröße: 20 aktuelle Seite: 1 Sortierung: Name: DESC Filter: ) Artikel Name SKU
Ergebnis
Das Ergebnis ist die gesamte Produktsammlung mit der Suchzeichenfolge „A“, sortiert in absteigender Reihenfolge.
“data”: “products”: “items”: [
“name”: “Strive Shoulder Pack”,
“sku”: “24-MB04”
]
Erstellen Sie eine GraphQL-Mutation
In GraphQL ist Mutation ein Anforderungstyp, der Vorgänge wie Lesen ausführt, um die Daten zu ändern. Eine Mutation kann Objekte und Felder erstellen, aktualisieren oder löschen. Eine Mutation ist eine Anfrage, die Daten auf irgendeine Weise ändert, beispielsweise das Hinzufügen, Bearbeiten oder Löschen von Informationen. In der REST-Terminologie funktionieren Abfragen wie GET-Anfragen, während Mutationen POST, PUT und DELETE ähneln.
Mutationen in Magento GraphQL sind leistungsstarke Tools, mit denen neue Entitäten erstellt, vorhandene geändert oder Daten gelöscht werden können. Sie können Mutationen beispielsweise verwenden, um ein neues Kundenkonto zu erstellen, ein Produkt zu einem Warenkorb hinzuzufügen, den Bestellstatus zu aktualisieren oder einen Kundendatensatz zu löschen.
Hier ist ein Beispiel für eine Magento GraphQL-Mutation, die ein neues Kundenkonto erstellt:
Anfrage
mutation createCustomer( input: email: “[email protected]” Vorname: „John“ Nachname: „Doe“ Passwort: „Admin1234@“ ) Kunde Vorname Nachname E-Mail
Antwort
“data”: “createCustomer”: “customer”: “firstname”: “John”, “lastname”: “Doe”, “email”: “[email protected]”
In diesem Beispiel erstellt die Mutation ein neues Kundenkonto mit der angegebenen E-Mail-Adresse, dem Vornamen, dem Nachnamen und dem Passwort. Die Antwort umfasst den Vornamen, den Nachnamen und die E-Mail-Adresse des neuen Kunden.
Zusammenfassung
Durch die Verwendung von GraphQL in Magento 2 können Sie APIs erstellen, die effizienter und flexibler sind als herkömmliche REST-APIs. Dies liegt daran, dass Entwickler mit GraphQL genau angeben können, welche Daten sie benötigen, anstatt einen festen Datensatz zu erhalten, der möglicherweise mehr Informationen als nötig enthält.
Zusätzlich zu einer verbesserten Leistung können benutzerdefinierte GraphQL-Module auch eine optimierte Entwicklererfahrung bieten. Es kann dabei helfen, leicht zu verstehen, wie die API abgefragt und die benötigten Daten abgerufen werden. Dies kann den Zeit- und Arbeitsaufwand für die Erstellung von Integrationen und Anwendungen auf Ihrem Magento-Shop reduzieren.
Häufig gestellte Fragen
F. Warum GraphQL in Magento 2 verwenden?
A. GraphQL bietet eine eindeutige und verständliche Beschreibung der in der API benötigten Daten. Sie können APIs erstellen, die effizienter und flexibler sind als herkömmliche REST-APIs. GraphQL verwendet Typen, um sicherzustellen, dass Kanäle nur nach dem Möglichen fragen und klare und hilfreiche Fehler liefern.
Q. Wie richte ich GraphQL in Magento 2 ein?
A. Um GraphQL in Magento einzurichten, benötigen Sie die folgenden Schritte:
Sie benötigen eine GraphQL-IDE wie GraphiQL oder eine Browsererweiterung, um die Codebeispiele und Tutorials auszuführen. Wenn Sie eine Browsererweiterung installieren, stellen Sie sicher, dass diese Anforderungsheader festlegen kann. Altair GraphQL Client ist eine der Erweiterungen im Chrome Web Store, die diese Aufgabe erledigen kann, Sie können aber auch Postman verwenden.