Interagire con le API REST dell’ecommerce Magento 2

Interagire con le API REST dell’ecommerce Magento 2

In questo articolo ti aiutiamo a capire come interagire con le API che Magento 2 mette a disposizione, con un focus sul protocollo rest.

In questo articolo ti aiutiamo a capire come interagire con  le API che Magento 2 mette a disposizione, con un focus sul protocollo rest e tralasciando, per il momento, il protocollo SOAP.

Per effettuare i test un'ottima risorsa è Postman, applicazione che permette di testare chiamate rest con estrema facilità, impostando anche parametri nell’header della richiesta. Nella versione 2 di Magento le API rest sono state ampliate, fornendo di fatto un servizio equivalente a quello per il protocollo SOAP.  Puoi trovare nella documentazione ufficiale l’elenco degli endpoint messi a disposizione: https://devdocs.magento.com/guides/v2.3/rest/list.html

Il primo Step è capire i tipi di endpoint da chiamare. Magento 2 suddivide infatti  le API rest per autorizzazione di accesso, in 3 raggruppamenti:

  1. risorse per amministratori o integrazioni (Administrator or Integration)
    alcune risorse sono permesse solo con accesso da amministratori o integrazioni (ad esempio applicazioni esterne che devono dialogare costantemente con le API di Magento)
    https://devdocs.magento.com/redoc/2.3/admin-rest-api.html
     
  2. risorse per clienti (Customer)
    questo elenco riporta le risorse accessibili solo a utenti registrati (non necessariamente amministratori). Solitamente in questa categoria si trovano risorse che forniscono informazioni a un utente sulla propria situazione (gli ordini, il carrello…)
    https://devdocs.magento.com/redoc/2.3/customer-rest-api.html
     
  3. risorse per guest user (Visitators)
    risorse per le quali non è richiesta nessuna autorizzazione
    https://devdocs.magento.com/redoc/2.3/guest-rest-api.html

Se l'esigenza è quella di chiamare API per le quali è richiesta un autorizzazione è possibile autenticarsi  tramite Authentication Token. Questo tipo di accesso prevede che il chiamante passi a ogni chiamata un Bearer Token negli headers http delle chiamate:

Authorization: Bearer <authentication token>

Sia gli amministratori, sia i clienti (customer) possono richiedere il token tramite un apposita API.

La durata della validità del token varia in base alla tipologia di utente: per i clienti il token ha un validità di 1 ora, mentre è di 4 ore per gli amministratori. Per le integrazioni la richiesta del token non è necessaria in quanto al censimento dell’integrazione sul pannello di amministrazione di  Magento viene generato un token di accesso per  l’integrazione che non ha scadenza: https://devdocs.magento.com/guides/v2.3/get-started/authentication/gs-authentication-token.html

 

Esempio di  codice PHP per richiedere un Authentication Token


private function createToken() {
$userData = array("username" => ….., "password" => …..);
$ch = curl_init($this->apiUrl."/rest/V1/integration/admin/token");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($userData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Content-Lenght: " . strlen(json_encode($userData))));
$token = curl_exec($ch);
return $token;          
}

Esempio di  codice PHP  di una chiamata a una risorsa API passando il Bearer Token


$curl = … endpoint da chiamare….

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array( "Content-Type: application/json", "Accept: application/json", "Authorization: Bearer " . “…….” ));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
return false;
} else {
return json_decode($response, true);
}

Le operazioni di ricerca


Alcuni endpoint ad esempio “/V1/products” o  “/V1/categories” permettono di poter inviare in GET dei parametri di filtraggio denominati “searchCriteria”.

I SearchCriteria seguono la seguente logica:

searchCriteria[filter_groups][<index>][filters][<index>][field]=<field_name>
searchCriteria[filter_groups][<index>][filters][<index>][value]=<search_value>
searchCriteria[filter_groups][<index>][filters][<index>][condition_type]=<operator>

Ovvero per ogni campo sul quale si intende effettuare un filtro, è necessario specificare il nome del campo, il  valore e l’operazione da eseguire.
Con la seguente chiamata si cercano tutti i prodotti della categoria 215:

V1/products?searchCriteria[filter_groups][0][filters][0][field]=category_id
&searchCriteria[filter_groups][0][filters][0][value]=215
&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

L’elenco delle condizioni che si possono eseguire si trova qui: https://devdocs.magento.com/guides/v2.3/rest/performing-searches.html

Inoltre vari “SearchCriteria” possono essere legati con condizioni logiche  AND o OR  proprio come avviene nelle condizioni delle Query SQL. Per effettuare questi legami è stato introdotto il concetto di “filter_groups”: le condizioni inserite all’interno dello stesso gruppo, vengono eseguite in OR, mentre i diversi gruppi vengono tra di loro legati con AND logico. Con la chiamata qui sotto vengono restituiti sia tutti i prodotti della categoria 215, sia tutti i prodotti della categoria 216, in quanto le condizioni sono eseguite in OR.

V1/products?searchCriteria[filter_groups][0][filters][0][field]=category_id
&searchCriteria[filter_groups][0][filters][0][value]=215
&searchCriteria[filter_groups][0][filters][0][condition_type]=eq
&searchCriteria[filter_groups][0][filters][1][field]=category_id
&searchCriteria[filter_groups][0][filters][1][value]=216
&searchCriteria[filter_groups][0][filters][1][condition_type]=eq

Beh, adesso non rimane che augurarti buon lavoro e… buon codice!