Technologie Gadgets, SEO Tipps, Geld Verdienen mit WEB!

Come creare e utilizzare GraphQL personalizzato in Magento…

Come creare e utilizzare GraphQL personalizzato in Magento...

Magento 2 è una potente Piattaforma di e-commerce che fornisce funzionalità pronte all’uso. Tuttavia, potrebbero esserci momenti in cui è necessario estendere la piattaforma per soddisfare requisiti aziendali specifici. È qui che entra in gioco GraphQL personalizzato!

Se non hai familiarità con GraphQL, è un linguaggio di query per API sviluppato da Facebook (ora Meta). Consente agli sviluppatori di ottenere i dati di cui hanno bisogno e di riceverli solo in risposta alle loro domande. Magento 2 supporta GraphQL per aiutarti a semplificare i processi dei dati.

In questo articolo, ti dirò come Utilizzare GraphQL in Magento 2. Inizierò abilitando il modulo GraphQL in Magento 2 e accedendo all’endpoint GraphQL, quindi effettuerò query GraphQL per recuperare dati su prodotti, categorie, clienti, ordini, ecc.

Una panoramica di GraphQL in Magento 2

GraphQL è un’alternativa a REST e SOAP in Magento 2. Ti consente di specificare e ricevere facilmente i dati, rendendo le risposte API più efficienti e riducendo il sovraccarico della rete. Un semplice esempio è Applicazione Web progressiva (PWA) con rendering lato client.

In Magento 2, GraphQL è una nuova funzionalità aggiunto nella versione 2.3.4. L’obiettivo principale è accelerare e potenziare le API, la loro flessibilità e la loro efficacia. Consente agli sviluppatori di interrogare e modificare i dati nel database di Magento utilizzando una sintassi standardizzata.

Sono in uso tre operazioni principali di GraphQL:

  1. interrogazioni (per leggere e ricevere informazioni);
  2. mutazioni (necessario per intraprendere azioni, creare dati e modificare informazioni. Ad esempio, l’e-mail di un cliente);
  3. abbonamenti (questa operazione non è ancora disponibile in Magento, ma offre l’opportunità di ottenere automaticamente i dati dal server in tempo reale dopo un po’, ad esempio, per le notifiche).

Miglioramenti di GraphQL in Magento 2.4.6

In AdobeCommerce 2.4.6la funzionalità degli ordini di acquisto è stata completamente esposta anche nel livello GraphQL aggiungendo regole di approvazione nell’API.

I proprietari di negozi e i commercianti otterranno grandi miglioramenti delle prestazioni grazie al processo di rendering migliorato dell’albero delle categorie in Magento Open Source 2.4.6.

Il caricamento dei figli delle categorie mediante il refactoring del codice è stato migliorato rimuovendo le chiamate ai metodi non necessarie, migliorando la memorizzazione nella cache dell’albero delle categorie e caricando ricorsivamente i dati delle categorie.

Sono state migliorate anche le operazioni del carrello in blocco per quanto riguarda i tempi di risposta alle query, in particolare nelle situazioni in cui sono stati aggiunti 500 o più prodotti al carrello.

Perché GraphQL è utile per gli sviluppatori?

GraphQL è utile per gli sviluppatori Magento 2 per i seguenti motivi.

  • Gli sviluppatori possono richiedere solo i dati di cui hanno bisogno, il che si traduce in trasferimenti di dati più piccoli ed efficienti. Ciò è particolarmente importante per i dispositivi mobili e con larghezza di banda ridotta.
  • Fornisce un modello di dati flessibile, che consente agli sviluppatori di eseguire query sui dati in modo più naturale e intuitivo. Ciò semplifica la creazione di applicazioni complesse basate sui dati.
  • Ha una sintassi semplice e intuitiva, che facilita l’apprendimento e l’utilizzo da parte degli sviluppatori. Questa semplicità riduce la curva di apprendimento e consente agli sviluppatori di concentrarsi sulla creazione delle proprie applicazioni.
  • Gli sviluppatori possono creare query, mutazioni e tipi GraphQL personalizzati, consentendo loro di estendere lo schema predefinito della piattaforma e creare funzionalità personalizzate che soddisfino i loro requisiti specifici.
  • Consente query ottimizzate, che possono migliorare significativamente le prestazioni dell’applicazione. Questo perché riduce il numero di richieste API necessarie per recuperare i dati.

Non lasciare che le API obsolete ostacolino il tuo negozio Magento!

Iscriviti a DreamHost e sperimenta la potenza di un recupero dei dati più rapido ed efficiente con GraphQL.

Confronta GraphQL con l’API Rest

Con l’avvento delle PWA, è necessario ottenere quantità minori di dati ed effettuare meno richieste API. Arriva la tecnologia avanzata e la necessità di GraphQL. Magento 2 supporta sia le API GraphQL che REST per interagire con la piattaforma.

Ecco alcune delle principali differenze tra API REST e GraphQL.

API REST GraphQL
Interrogando Con le API REST, in genere effettui richieste separate per ciascuna risorsa o endpoint a cui desideri accedere. Con GraphQL, puoi recuperare tutti i dati necessari in un’unica richiesta e specificare quali campi e dati desideri.
Memorizzazione nella cache Le API REST sono spesso più facili da memorizzare nella cache rispetto a GraphQL perché gli URL vengono utilizzati come chiavi di cache. Con GraphQL, la memorizzazione nella cache può essere più complessa perché ogni richiesta è unica e potrebbe richiedere un set di dati diverso.
Curva di apprendimento Le API REST sono più semplici da comprendere e utilizzare ed è disponibile una vasta gamma di documentazione e strumenti. GraphQL ha una curva di apprendimento più ripida e potrebbe essere necessario più tempo per diventare abili con la tecnologia.
Prestazione Le API REST possono essere più veloci quando è richiesta solo una piccola quantità di dati. GraphQL può essere più efficiente delle API REST per alcuni casi d’uso perché riduce il recupero eccessivo e insufficiente dei dati.

Inoltre, si può notare che i coinvolgimenti di GraphQL eseguono misure di limitazione della velocità e altre misure di sicurezza di negazione del servizio.

Sebbene la scelta di GraphQL o API REST in Magento 2 sia del tutto soggettiva e basata sulle esigenze del sito web. Ma l’unico punto chiave da notare è che quando si tratta di sicurezza – RestAPI offre molti modi innati per imporre la sicurezza delle tue API.

Requisiti per GraphQL in Magento 2

Hai bisogno di GraphQL IDE come GraphiQL o un’estensione del browser per eseguire esempi di codice ed esercitazioni. Se installi un’estensione del browser, assicurati che possa impostare le intestazioni delle richieste. Client Altair GraphQL è una delle estensioni del Chrome Web Store che può svolgere il lavoro.

Accedi all’endpoint GraphQL in Magento 2

L’endpoint GraphQL in Magento 2 è /graphql. Per accedere all’URL GraphQL, imposta l’endpoint GraphQL inserendo http:///graphql nella barra degli URL del tuo IDE o dell’estensione installata sopra.

Esempio: Richiesta di interrogazione

paesi regioni_disponibili nome id codice nome_completo_locale nome_completo_inglese id abbreviazione_di_due_lettere abbreviazione_di_tre_lettere

Risposta: restituisce l’elenco di tutti i paesi

Esegui richieste GraphQL in Magento 2

Quando si effettua una richiesta GraphQL in Magento, la richiesta supporta i metodi HTTP GET e POST. Le richieste di mutazioni dovrebbero essere effettuate solo nel metodo POST. Facoltativamente è possibile inviare una richiesta di query GET in un URL.

Per esempio, http:///graphql?query=%7Bprodotti ha inviato una richiesta GET con una stringa di query nell’URL.

Richiesta

prodotti (filtro: sku: eq: “24-WB01” ) articoli nome sku

Risposta

“dati”: “prodotti”: “articoli”: [

        

          “name”: “Voyage Yoga Bag”,

          “sku”: “24-WB01”

        

      ]

Crea GraphQL personalizzato in Magento 2

È importante notare che la creazione di un nuovo modulo con un endpoint GraphQL in Magento 2 richiede una buona comprensione della sintassi GraphQL, nonché della piattaforma Magento 2. Segui i passaggi seguenti per creare un modulo GraphQL in Magento 2.

Crea una cartella DreamHost/Graphql nella directory app/codice.

Passaggio 1: crea un file Registration.php

Creare un registrazione.php archiviare app/code/DreamHost/Graphql/registrattion.php.

Passaggio 2: crea un file etc/module.xml

Creane uno nuovo modulo.xml file nel eccetera directory. Questo file dovrebbe definire le informazioni di base sul tuo modulo, come nome, versione e dipendenze. Ecco un esempio di a modulo.xml file.

Passaggio 3: definire lo schema GraphQL

Uno schema GraphQL definisce i tipi, le query e le mutazioni supportate dalla tua API.

Successivamente, crea un file in app/code/DreamHost/Graphql/etc/schema.graphls directory come nell’esempio seguente. Si noti che il etc/schema.graphqls parte è obbligatoria.

IL /etc/schema.graphqls il file definirà:

  • Definisce la struttura di base delle query e delle mutazioni.
  • Definisce quali attributi possono essere utilizzati per l’input e l’output nelle query e nelle mutazioni GraphQL.
  • Le richieste e le risposte contengono elenchi separati di funzionalità valide.
  • Punta ai risolutori che verificano ed elaborano i dati di input e la risposta.
  • È l’origine per la visualizzazione dello schema in un browser GraphQL.
  • Definisce quali oggetti vengono memorizzati nella cache.

Copia il seguente codice:

type Query prodotti ( ricerca: 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

Definisci interrogazione

Una definizione di query è costituita da una riga oppure può essere complessa. IL tipo è definita come una query. In quanto sopra, usiamo il prodotti oggetto definito come nome query, che definisce le parole chiave utilizzate per costruire una query.

Puoi creare la tua query personalizzata come:

tipo Query myCustomQuery(input: MyCustomInput!): MyCustomOutput @resolver(class: “Vendor\\Module\\Model\\Resolver\\MyCustomQuery”)

Esempio

digita Query ciao: String

Definire i parametri di input

Nella query GraphQL, ogni definizione di tipo include tutti gli attributi di input, output e ordinamento di un oggetto. È possibile definire ciascun attributo che può essere utilizzato come input per eseguire operazioni del modulo.

Nel codice precedente, il IngressoFiltroAttributoProdotto L’oggetto viene utilizzato come attributo di input per filtrare.

input AttributoProdottoFilterInput ID_categoria: FilterEqualTypeInput

Allo stesso modo, il FiltroEqualTypeInput L’oggetto definisce un filtro che corrisponde esattamente all’input.

input FiltroEqualTypeInput in: [String]

eq: Stringa

Risultati

L’esempio seguente filtra e restituisce la ricerca di prodotti i cui ID_categoria equivale a 1.

prodotti (filtro: category_id: eq: “1”) conteggio_totale articoli nome

Specificare gli attributi di output

La risposta API consente agli sviluppatori di creare un’app o un’integrazione personalizzata, ma a volte non è previsto che la risposta personalizzata venga ottenuta. Ad esempio, quando specifichi un prezzo in un filtro di input, Magento lo valuta come a Valore flottante.

In un schema.graphqls file, l’interfaccia di output definisce gli attributi di livello superiore. È necessario specificare il tipo di dati di ciascun attributo, se si tratta di uno scalare, di un oggetto o di un array.

Nel codice precedente utilizziamo la query prodotti. IL pagina_info l’attributo contiene l’ SearchResultPageInfo tipo di dati definito in schema.graphqls archiviare sotto ModuloGraphQL.

SearchResultPageInfo fornisce la navigazione per la risposta alla query.

type SearchResultPageInfo page_size: Int current_page: Int total_pages: Int

Definire le annotazioni

Puoi descrivere qualsiasi attributo, definizione di tipo o entità all’interno di un file schema.graphqls file aggiungendo quanto segue alla riga:

@doc(descrizione: ““)

Esempio

SKU: FilterTypeInput @doc(descrizione – Un numero o un codice assegnato a un prodotto per identificare il prodotto, le opzioni, il prezzo, ecc.).

Passaggio 4: memorizzazione nella cache delle query

IL @cache La direttiva definisce se i risultati di determinate query possono essere memorizzati nella cache. Le query relative a prodotti, categorie e CMS possono essere memorizzate nella cache.

Definire le query memorizzabili nella cache nel modo seguente:

@cache(cacheIdentity: “DreamHost\\Graphql\\Model\\Resolver\\Block\\Identity”).

Il valore Identità della cache punta alla classe responsabile del recupero dei tag della cache. Una query senza identità cache non verrà memorizzata nella cache.

Crea il file in DreamHost/Graphql/Model/Resolver/Block/Identity.php e copia il seguente codice:

Passaggio 5: definire il risolutore di schemi

I risolutori sono responsabili della gestione delle query e delle mutazioni. In Magento 2, i risolutori sono definiti come classi PHP. Puoi definire i tuoi risolutori in una directory separata, come Modello/Risolutore.

Crea un file in DreamHost/Graphql/Model/Resolver/Products.php e copia il seguente codice:

productRepository = $productRepository; $this->searchCriteriaBuilder = $searchCriteriaBuilder; funzione pubblica risolvere(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) $productsData = $this->getProductsData(); restituire $prodottiDati; /** * @return array * @throws GraphQlNoSuchEntityException */ private function getProductsData(): array try /* filtro per tutte le pagine */ $searchCriteria = $this->searchCriteriaBuilder->create(); $prodotti = $this->productRepository->getList($searchCriteria)->getItems(); $productId = $prodotto->getId(); foreach($prodotti come $prodotto) $productRecord[‘allProducts’][$productId][‘sku’] = $prodotto->getSku(); $prodottoRecord[‘allProducts’][$productId][‘name’] = $prodotto->getNome(); $prodottoRecord[‘allProducts’][$productId][‘price’] = $prodotto->getPrezzo(); catch (NoSuchEntityException $e) lancia nuova GraphQlNoSuchEntityException(__($e->getMessage()), $e); restituisce $prodottoRecord;

Passaggio 6: eseguire i comandi

Esegui i seguenti comandi nella directory root della tua istanza Magento 2 per abilitare il modulo e svuotare la cache:

modulo bin/magento:abilita DreamHost_Graphql setup bin/magento:aggiorna bin/magento setup:di:compile bin/magento cache:pulisci

Passaggio 7: testare ed eseguire la query Graphql

Il passaggio finale è assicurarsi che la query sia priva di errori e fornisca risposte adeguate. Una delle tante estensioni prontamente disponibili, come ChromeiQl, GraphiQLO Client Altair GraphQLpuò farlo.

Richiedi carico utile

prodotti (ricerca: “A” pageSize: 20 currentPage: 1 sort: nome: DESC filtro: ) articoli nome sku

Risultato

Il risultato sarà tutta la raccolta di prodotti con la stringa di ricerca “A”, ordinata in ordine decrescente.

“dati”: “prodotti”: “articoli”: [

“name”: “Strive Shoulder Pack”,

“sku”: “24-MB04”

]

Crea una mutazione GraphQL

In GraphQL, Mutazione è un tipo di richiesta che esegue operazioni come la lettura per modificare i dati. Una mutazione può creare, aggiornare o eliminare oggetti e campi. Una mutazione è una richiesta che modifica i dati in qualche modo, ad esempio aggiungendo, modificando o eliminando informazioni. Nella terminologia REST, le query funzionano come richieste GET, mentre le mutazioni sono simili a POST, PUT e DELETE.

Le mutazioni in Magento GraphQL sono potenti strumenti che possono essere utilizzati per creare nuove entità, modificare quelle esistenti o eliminare dati. Ad esempio, puoi utilizzare le mutazioni per creare un nuovo account cliente, aggiungere un prodotto al carrello, aggiornare lo stato dell’ordine o eliminare il record di un cliente.

Ecco un esempio di una mutazione Magento GraphQL che crea un nuovo account cliente:

Richiesta

mutazione createCustomer( input: email: “[email protected]” nome: “John” cognome: “Doe” password: “Admin1234@” ) cliente nome cognome email

Risposta

“data”: “createCustomer”: “customer”: “firstname”: “John”, “lastname”: “Doe”, “email”: “[email protected]”

In questo esempio, la mutazione crea un nuovo account cliente con l’e-mail, il nome, il cognome e la password specificati. La risposta include il nome, il cognome e l’indirizzo e-mail del nuovo cliente.

Riepilogo

Utilizzando GraphQL in Magento 2, puoi creare API più efficienti e flessibili rispetto alle tradizionali API REST. Questo perché GraphQL consente agli sviluppatori di specificare esattamente di quali dati hanno bisogno, invece di ricevere un set fisso di dati che potrebbe contenere più informazioni del necessario.

Oltre a migliorare le prestazioni, i moduli GraphQL personalizzati possono anche fornire un’esperienza di sviluppo più snella. Può aiutare a capire facilmente come eseguire query sull’API e ottenere i dati di cui hanno bisogno. Ciò può ridurre il tempo e gli sforzi necessari per creare integrazioni e applicazioni sul tuo negozio Magento.

Domande frequenti

D. Perché utilizzare GraphQL in Magento 2?

UN. GraphQL fornisce una descrizione definita e comprensibile dei dati richiesti nell’API. Puoi creare API più efficienti e flessibili rispetto alle tradizionali API REST. GraphQL utilizza i tipi per garantire che i canali chiedano solo ciò che è possibile e forniscano errori chiari e utili.

Q. Come impostare GraphQL in Magento 2?

UN. Per configurare GraphQL in Magento, saranno necessari i seguenti passaggi:

Per eseguire esempi di codice ed esercitazioni è necessario un IDE GraphQL come GraphiQL o un’estensione del browser. Se installi un’estensione del browser, assicurati che possa impostare le intestazioni delle richieste. Altair GraphQL Client è una delle estensioni del Chrome Web Store che può svolgere il lavoro, oppure puoi anche utilizzare Postman.