:::: MENU ::::

Ejemplos de uso API REST Magento 2

Ejemplos de uso API REST Magento 2
9 votos, 2.56 media (54% puntos)

Una de las mejoras más importantes de Magento es la renovación completa del API.

Al igual que ocurría en Magento 1, Magento expone sus APIs vía dos protocolos: REST y SOAP, pero a diferencia de lo que ocurría antes, en Magento 2 ambas APIs (SOAP y REST) exponen la misma funcionalidad. En Magento 1, por el contrario, el conjunto de llamadas era diferente y el API SOAP era mucho más completo que el API REST.

En este artículo explicaremos el uso básico del API REST, para realizar tres operaciones básicas:

  • Obtener un token de acceso
  • Obtener la información de un producto
  • Actualizar la información de un producto

Para utilizar cualquiera de las dos APIs, en primer lugar deberemos identificarnos de algún modo.

En el caso del API REST, la autorización se realiza con las credenciales de un usuario del administrador. Para ello, habitualmente crearemos un nuevo Rol con los permisos para las funciones que deseamos exponer y un usuario con dicho Rol.

Una vez tenemos el usuario creado, tendremos que realizar una primera llamada para identificarnos y obtener un token de autorización. Si realizamos la integración en PHP, podemos utilizar PHP-CURL.

Token de autorización API REST Magento 2

$url = 'http://www.localhost.com/index.php/rest/V1/integration/admin/token';

$data = array("username" => "", "password" => "");
$data_string = json_encode($data);

$headers = array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string)
);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$token = curl_exec($ch);

$token = json_decode($token);
echo $token;

Con esta llamada y si nuestro usuario es correcto, Magento nos devolverá un token de autorización que deberemos utilizar en las siguientes llamadas al API.

Consultar un producto con el API REST Magento 2

Para consultar la información de un producto con el API REST de Magento, únicamente necesitaremos el SKU del producto.

La llamada en este caso es muy sencilla, ya que únicamente requiere del envío del token que acabamos de obtener en la cabecera de la petición. Igualmente si realizamos la llamada con CURL, podremos hacerlo de la siguiente forma:

$token = '';

$requestUrl = 'http://www.localhost.com/index.php/rest/V1/products/';
$headers = array("Authorization: Bearer $token");

$ch = curl_init($requestUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

$result=  json_decode($result);
print_r($result);

Actualizar información de un producto con el API REST Magento 2

De forma similar podemos actualizar un producto con la información necesaria.

En este caso y siguiendo la definición estándar de un API REST, Magento expone está opción por medio de una llamada tipo PUT, a la que enviaremos únicamente los datos que queremos actualizar. El resto de los datos del producto quedarán inalterados.

$token = '';

$requestUrl = 'http://www.localhost.com/index.php/rest/V1/products/';
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer ' . $token
);
$data = array(
    'product' => array(
        'name' => 'Sandwich Salami (Store 2)',
    )
);

$data = json_encode($data);

$ch = curl_init($requestUrl);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

$result=  json_decode($result);
print_r($result);

La llamada nos devolverá los datos del producto modificado, de igual modo que los obteníamos en la petición de información anterior.

Actualizar atributos custom a través del API rest

Si queremos actualizar los atributos estándar de un producto o de cualquier otra entidad, podemos hacerlo como en el caso anterior, pero ¿qué ocurre si queremos actualizar un atributo que hemos añadido a los productos a través de la gestión de atributos del backend.

En ese caso debemos modificar un poco el método anterior y añadir algo de información al json. Por ejemplo si tenemos un nuevo atributo con código needs_sync, deberemos enviar los datos de la siguiente forma:

$token = '';
 
$requestUrl = 'http://www.localhost.com/index.php/rest/V1/products/';
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer ' . $token
);
$data = array(
    'product' => array(
        'name' => 'Sandwich Salami (Store 2)',
        'custom_attributes' => array(
	    '0' => array(
	        'attribute_code' => 'needs_sync',
	        'value' => '0'
	    )
	)
    )
);
 
$data = json_encode($data);
 
$ch = curl_init($requestUrl);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
 
$result=  json_decode($result);
print_r($result);

Limitar la información retornada por el API rest

Sobre todo cuando realizamos búsquedas a través del API y si el resultado de las búsquedas es muy amplio, podemos encontrarnos con que la cantidad de información retornada es muy grande.

Si queremos limitar el retorno de información, podemos indicar a Magento qué campos o atributos deseamos que nos sean devueltos. Por ejemplo si estamos buscando productos que cumplen una serue de condiciones para luego realizar operaciones más complejas con ellos, quizá únicamente necesitamos una lista de nombres y skus.

En ese caso podríamos añadir a la ULR de la petición un nuevo parámetro, como el que sigue, de forma que la información retornada incluiría únicamente nombre y sku.

http://www.localhost.com/index.php/rest/V1/products/sku-del-producto?fields=items[sku],items[name]

Acceso por Store View al API de Magento 2

Una de las cosas que han cambiado respecto a Magento 1 es la forma en la que indicar al API el Store View al que deseamos acceder.

En el caso de Magento 1, el API recibía el ID de la tienda por medio de un parámetro más de información (en este caso) del producto que queríamos actualizar.

En Magento 2, en cambio, el identificador de la tienda a la que queremos acceder, debe enviarse como parte de la URL de la llamada, de forma que las llamadas anteriores quedarían de la siguiente forma:

Datos por defecto de un producto:

http://www.localhost.com/index.php/rest/V1/products/

Datos dell producto para un Store View en particular:

http://www.localhost.com/index.php/rest//V1/products/

Mas información sobre el API REST de Magento 2

La definición completa del API REST de Magento 2 puede encontrarse en la documentación oficial, a través de los siguientes enlaces:

http://devdocs.magento.com/guides/v2.0//rest/bk-rest.html
http://devdocs.magento.com/swagger/index.html




Hey! Qué opinas sobre el artículo?