So erstellen und verwenden Sie benutzerdefiniertes GraphQL in Magento …

Hinweis: Der folgende Artikel hilft Ihnen dabei: So erstellen und verwenden Sie benutzerdefiniertes GraphQL in Magento …

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:

  1. Abfragen (zum Lesen und Empfangen von Informationen);
  2. Mutationen (wird benötigt, um Maßnahmen zu ergreifen, Daten zu erstellen und Informationen zu ändern. Zum Beispiel die E-Mail-Adresse eines Kunden);
  3. 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.
Lesen:  Ein detaillierter Leitfaden zur Arbeitsunfallversicherung für kleine Unternehmen

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:///graphql in der URL-Leiste Ihrer IDE oder Erweiterung, die Sie oben installieren.

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:///graphql?query=%7Bproducts hat eine GET-Anfrage mit einer Abfragezeichenfolge in der URL gesendet.

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.

Lesen:  Was ist ein RSS-Feed? So verwenden Sie RSS

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 /etc/schema.graphqls Datei definiert:

  • 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:

Lesen:  Backup und Wiederherstellung: Schutz vor Cyberangriffen

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.