Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Magento
Code

Creazione di una API personalizzata in Magento: Prima Parte

by
Difficulty:AdvancedLength:MediumLanguages:
This post is part of a series called Create a Custom API in Magento.
Create a Custom API in Magento: Part Two
This post is part of a series called Create a Custom API in Magento.
Create a Custom API in Magento: Part Two

Italian (Italiano) translation by Cristiano Verondini (you can also view the original English article)

Introduzione

Per ogni piattaforma di successo è fondamentale rimanere aggiornata implementando caratteristiche che riflettano i continui progressi della tecnologia affinché possano competere sul mercato. Una delle caratteristiche più importanti per una piattaforma è la possibilità di esporre API che consentano l'integrazione con sistemi di terze parti fornendo così l'opportunità di raggiungere una comunità più ampia. Magento è una delle piattaforme di commercio elettronico di maggior successo e fornisce un insieme di caratteristiche e funzionalità che provano il fatto che sia un vero framework a livello enterprise.

Esporre API per l'accesso alle proprie risorse ha tutta una serie di benefici. Uno dei benefici più evidenti è che ciò rende possibile fornire accesso alle proprie risorse a differenti piattaforme rendendo così le risorse stesse indipendenti dalla piattaforma. Questo grazie a protocolli come XML­-RPC/SOAP che consentono questa esposizione delle risorse in maniera molto semplice. Nella realizzazione del nostro modulo personalizzato useremo, a titolo di esempio, SOAP.

In questo tutorial creeremo un modulo che chiameremo "Customapimodule". Nel seguito assumeremo la familiarità con il processo base di creazione di moduli in Magento. Se questo non fosse chiaro è possibile consultare questo interessante articolo che fornisce le nozioni base sulla creazione di un modulo personalizzato.

Un'occhiata alla struttura dei file

Di seguito l'elenco dei file necessari per il setup desiderato:

  • app/etc/modules/Envato_All.xml: è il file necessario per l'abilitazione del nostro modulo personalizzato.
  • app/code/local/Envato/Customapimodule/etc/config.xml: è il file per la configurazione del modulo.
  • app/code/local/Envato/Customapimodule/etc/api.xml: è il file che dichiara quali sono le API fornite dal nostro modulo.
  • app/code/local/Envato/Customapimodule/etc/wsdl.xml: è il file all'interno del quale definiremo i metodi forniti dalle nostre API seguendo le convenzioni WSDL.
  • app/code/local/Envato/Customapimodule/Helper/Data.php: è il file utilizzato dal sistema di traduzioni di Magento.
  • app/code/local/Envato/Customapimodule/Model/Product/Api.php: è il file di modello che implementa la logica dei metodi forniti dalla nostra API.
  • app/code/local/Envato/Customapimodule/Model/Product/Api/V2.php: è il file necessario per supportare la versione v2 delle API di Magento.

Creazione di un Modulo Personalizzato: impostazione iniziale dei file

Per cominciare è necessario creare un file per l'abilitazione del modulo. Creiamo quindi il file "app/etc/modules/Envato_All.xml" inserendo al suo interno il contenuto mostrato poco più avanti. Nell'esempio abbiamo usato "Envato" come namespace del nostro modulo e "Customapimodule" come nome. Il nostro modulo "Customapimodule" verrà abilitato di default.

Come passo successivo è necessario creare un file di configurazione per il modulo. Creiamo quindi il file "app/code/local/Envato/Customapimodule/etc/config.xml"  ed inseriamo al suo interno il seguente contenuto:

Niente di particolarmente complesso, abbiamo semplicemente dichiarato quali sono le classi "Model" e "Helper" seguendo le convenzioni di Magento.

Proseguendo, creiamo il file "app/code/local/Envato/Customapimodule/etc/api.xml" inserendo al suo interno il contenuto mostrato più avanti. Il file "api.xml" è usato per dichiarare quali sono i metodi delle API esposti dal modulo.

Cominciamo con il tag <resources> che racchiude al suo interno l'elenco delle risorse dichiarate dal modulo. È possibile pensare ad una "risorsa" come ad una entità tramite la quale sia possibile categorizzare i metodi delle API.

Nel nostro esempio abbiamo creato una singola risorsa con nome <customapimodule_product>. Naturalmente è possibile usare un identificativo qualsiasi, l'importante è che il suo nome sia unico. All'interno del tag <customapimodule_product> abbiamo usato il tag <model> per fare riferimento al file "Model" di Magento all'interno del quale definiremo i metodi della nostra API. I metodi per l'accesso alle nostre risorse sono quindi inclusi all'interno del tag <methods>. Nel nostro esempio sarà sufficiente definire all'interno del tag <list> un solo metodo che chiameremo "items". Il suo scopo sarà quello di fornire un elenco di prodotti.

Andando avanti, il tag <acl>  all'interno della sezione <customapimodule_product> è usato per fornire le regole per l'accesso alle nostre risorse. Il valore "customapimodule/product", definito all'interno del tag <acl> fa riferimento alle definizioni che si trovano nella parte finale del file.

Nella parte finale del file è infatti possibile vedere che abbiamo dichiarato un tag <acl> separato che definisce "customapimodule/product". In sostanza questo meccanismo è utilizzato per implementare un controllo di accesso per le risorse affinché possano essere accedute tramite certi "API Roles" (ruolo per API) se sono in questo modo definite nel back-end di Magento. Questo aspetto sarà comunque discusso in modo più approfondito nella successiva parte di questo tutorial.

Al momento è possibile creare ed esporre API in due modi diversi, uno evoluzione dell'altro, detti v1 e v2. Nel nostro esempio vedremo come fare usando entrambi i metodi. Il tag <resources_alias> viene usato per definire il nome di un alias tramite il quale il nostro metodo potrà essere chiamato. Nell'esempio l'abbiamo definito come <product>. In questo modo ogni volta che sarà necessario invocarlo tramite le API v1 di Magento sarà possibile usare "product" come prefisso della risorsa. Allo stesso modo <v2> viene usato per definire il nome di un alias della risorsa affinché possa essere usato tramite le API v2 di Magento. In questo modo il prefisso della risorsa sarà "customapimoduleProduct". Ad ogni modo queste convenzioni risulteranno più chiare quando vedremo come invocare i metodi delle API nel prossimo tutorial.

Adesso creiamo il file "app/code/local/Envato/Customapimodule/etc/wsdl.xml" ed inseriamo al suo interno il contenuto che segue:

Il file "wsdl.xml" viene usato per definire i metodi esposti tramite la nostra API seguendo la sintassi SOAP. Nel seguito vedremo quali sono i tag più importanti.

Dapprima abbiamo definito il tipo composto "fieldInfo" che contiene due elementi: "entity_id" e "name". Abbiamo inoltre definito il tipo composto "fieldInfoArray" che deriva dal tipo composto "fieldInfo". "fieldInfoArray" è un array di elementi di tipo "fieldInfo".

In parole povere abbiamo definito le proprietà dell'oggetto che verranno restituite in risposta all'invocazione del nostro metodo tramite le API. Nel nostro caso il valore che verrà restituito sarà un array di prodotti. All'interno di quest'array ogni elemento avrà due proprietà derivanti dal prodotto: "entity_id" and "name". Naturalmente è possibile definire altre proprietà a seconda delle esigenze.

Dopo di ciò, all'interno del tag <message> "customapimoduleProductListRequest" abbiamo definito quali sono i parametri in ingresso necessari attraverso l'uso del tag <part>. Allo stesso modo, all'interno del tag <message> "customapimoduleProductListResponse" definiremo il tipo dei dati forniti in uscita dall'API. Nel momento in cui chiameremo un metodo dell'API sarà necessario passare il "sessionId". La risposta fornita dalla nostra API conterrà l'array di prodotti. Il resto dei tag sono necessari per far sì che il metodo appena definito appaia nell'elenco dei metodi esposti accedendo alle API tramite un'URL del tipo: http://yourmagentostore/api/v2_soap?wsdl=1

A questo punto è necessario creare il file "app/code/local/Envato/Customapimodule/Helper/Data.php" in modo da assicurarsi che il sistema di traduzioni di Magento funzioni in modo corretto. Questo file sarà praticamente vuoto ma è necessario che ci sia in modo da seguire le convenzioni di Magento.

Creiamo adesso il file che conterrà il model: "app/code/local/Envato/Customapimodule/Model/Product/Api.php".

A questo punto ricordiamo come più sopra, nel contenuto di "api.xml" abbiamo definito un metodo "items" all'interno di un tag <list>. Per questo motivo nella classe model qui sopra lo abbiamo implementato.

In questo metodo ci limitiamo a caricare i cinque prodotti più recenti e, iterando sul risultato ottenuto, creare un array di prodotti ognuno con le proprietà "entity_id" e "name". A questo punto è chiaro perché sia stato necessario definire un tipo composto all'interno di "wsdl.xml".

Dobbiamo a questo punto creare un file model per implementare le API v2 di Magento. Creiamo quindi il model file "app/code/local/Envato/Customapimodule/Model/Product/Api/v2.php" che abbia il seguente contenuto:

Come è possibile vedere ci limitiamo ad estendere la classe model prima definita nel file "app/code/local/Envato/Customapimodule/Model/Product/Api.php".

Quanto visto è tutto quello necessario per implementare la nostra API personalizzata. Per verificarne il funzionamento è sufficiente abilitare il modulo dal back-end e cancellare la cache. A questo punto visitando la pagina http://yourmagentostore/api/v2_soap?wsdl=1sarà possibile verificare che il metodo "customapimoduleProductList" che abbiamo definito è elencato assieme agli altri metodi esposti dalle API.

Nella prossima parte procederemo nell'implementazione vedendo come creare utenti e ruoli per l'utilizzo delle API e naturalmente, come sia possibile utilizzare attraverso le API i metodi personalizzati che abbiamo creato in questo tutorial.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.