Cómo conectar mediante Api REST con Magento 2

Introducción en el uso de REST en Magento2

Profile picture for user admin
Por Way2 Ecommerce
13 Jun 2023

Una de las grandes virtudes de Magento para la integración con otras plataformas es el uso de la API's vía SOAP o REST, aunque claramente en Magento 2 se impone REST. Permite integrar nuestro comercio con cualquier otra plataforma de una manera sencilla y muy flexible.  

Como desarrolladores de Magento 2 o como desarrolladores de plataformas que necesitemos conectar con un Magento 2, necesitamos una guía rápida para poder comprobar y entender la estructura de las peticiones y respuestas. En este artículo pretendemos mostrar una serie de consultas básicas que nos sirvan de base, para más adelante no solo consultar datos si no actualizar o crear nuestras propias API's.  

Esta pequeña guía simplemente quiere ayudar a tener un recurso donde poder realizar una conexión de manera rápida, ya que en ocasiones por no ser un proceso diario nos obliga a tener que mirar y remirar documentación recurrentemente refrescando dicho proceso.  

En esta ocasión vamos a aprovechar y utilizaremos un Plugin de Firefox que nos permitirá contar con un cliente REST solo instalando esta extensión en el navegador, sin necesidad de usar software como SoapUI o similar.  

En primer lugar descargaremos e implementaremos https://addons.mozilla.org/es/firefox/addon/restclient/  

Para este pequeño manual vamos a realiza la autenticación a través de Token, de esta forma se realiza una conexión previa que nos facilitará un token que por defecto será válido por 4 horas(pudiendo modificarlo desde el backend)  

Esta autenticación se basará en los permisos existentes en un usuario administrador con el que accedemos al back, si queremos consultar pedidos o realizar operaciones con productos o clientes deberemos de estar autorizados.  

Lo primero es en el navegador habilitar la extensión y acceder a la pantalla de inicio del plugin.

Plugin Rest Client


Nuestro host para estas pruebas será http://test.magento2.com. Para obtener el Token deberemos rellenar las siguientes opciones:  
Método: POST  
Url: http://test.magento2.com/rest/V1/integration/admin/token  
Headers (Se accede desde el menú superior Headers→Custom Headers): 

Name→ Content-Type
Attribute Value→ application/json

Body (reemplazado con los datos de vuestro usuario administrador):

{
"username": "way2ecommerce",
"password": "WY2E1234!"
}

Quedando de esta forma:

Solicitud de Token

Tanto los encabezados como las Urls podemos guardarlas para tener un acceso más rápido en el futuro  

Si los datos con correctos al clickar sobre Send nos devolverá el token en el apartado de la respuesta y el curl que podemos ejecutar desde línea de comandos, muy útil por necesitamos obtener el token de manera rápida.

Respuesta con el token

Este sería el resultado de la ejecución del comando curl

obtención vía Curl

Una vez obtenido el Token, ya podemos comenzar con las consultas, creación o edición.   
Lo primero será indicar el Token para que nos autorice. Para ello deberemos de crear una nueva cabecera donde indicarlo:

Headers para autorización

Indicando en el nombre “Authorization” y en el valor “Bearer TokenObtenido”. Mantendremos la cabecera indicada con anterioridad de “Content/type”/ “appication/Json”.

Ahora vamos a obtener los datos de un pedido, concretamente el pedido con id 2, para ello ahora indicaremos que el método es GET y la url “http://test.magento2.com/rest/V1/orders/2” quedando de esta forma:

Ejemplo de consulta

Y devolviendo todos los datos del pedido solicitado, en este caso con el id 2.

Respuesta de la petición

Probemos ahora con un producto, para ello solo deberemos modificar la Url indicando la entidad products y añadiendo el sku de dicho producto, por ejemplo : http://test.magento2.com/rest/V1/products/24-MB01 y obtendremos todos los datos del producto.

{
 "id": 1,
 "sku": "24-MB01",
 "name": "Joust Duffle Bag",
 "attribute_set_id": 15,
 "price": 34,
 "status": 1,
 "visibility": 4,
 "type_id": "simple",
 "created_at": "2023-01-20 13:48:36",
 "updated_at": "2023-01-20 13:48:36",
 "extension_attributes": {
 "website_ids": [1],
 "category_links": [{
  	"position": 0,
  	"category_id": "3"
 }, {
  	"position": 0,
  	"category_id": "4"
 }],
 "stock_item": {
 	"item_id": 1,
 	"product_id": 1,
 	"stock_id": 1,
 	"qty": 100,
 	"is_in_stock": true,
 	"is_qty_decimal": false,
 	"show_default_notification_message": false,
 	"use_config_min_qty": true,
 	"min_qty": 0,
 	"use_config_min_sale_qty": 1,
 	"min_sale_qty": 1,
 	"use_config_max_sale_qty": true,
 	"max_sale_qty": 10000,
 	"use_config_backorders": true,
 	"backorders": 0,
 	"use_config_notify_stock_qty": true,
 	"notify_stock_qty": 1,
 	"use_config_qty_increments": true,
 	"qty_increments": 0,
 	"use_config_enable_qty_inc": true,
 	"enable_qty_increments": false,
 	"use_config_manage_stock": true,
 	"manage_stock": true,
 	"low_stock_date": null,
 	"is_decimal_divided": false,
 	"stock_status_changed_auto": 0
 }
 },
 "product_links": [{
 	"sku": "24-MB01",
 	"link_type": "crosssell",
 	"linked_product_sku": "24-UG01",
 	"linked_product_type": "simple",
 	"position": 3
 }, {
 	"sku": "24-MB01",
 	"link_type": "crosssell",
 	"linked_product_sku": "24-WG083-blue",
 	"linked_product_type": "simple",
 	"position": 2
 }, {
 	"sku": "24-MB01",
 	"link_type": "crosssell",
 	"linked_product_sku": "24-WG086",
 	"linked_product_type": "simple",
 	"position": 1
 }, {
 	"sku": "24-MB01",
 	"link_type": "crosssell",
 	"linked_product_sku": "24-WG085_Group",
 	"linked_product_type": "grouped",
 	"position": 4
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-MB03",
 	"linked_product_type": "simple",
 	"position": 2
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-MB05",
 	"linked_product_type": "simple",
 	"position": 3
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-MB06",
 	"linked_product_type": "simple",
 	"position": 4
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-MB02",
 	"linked_product_type": "simple",
 	"position": 1
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-UB02",
 	"linked_product_type": "simple",
 	"position": 5
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-WB03",
 	"linked_product_type": "simple",
 	"position": 6
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-WB07",
 	"linked_product_type": "simple",
 	"position": 8
 }, {
 	"sku": "24-MB01",
 	"link_type": "upsell",
 	"linked_product_sku": "24-WB04",
 	"linked_product_type": "simple",
 	"position": 7
 }],
 "options": [],
 "media_gallery_entries": [{
 	"id": 1,
 	"media_type": "image",
 	"label": "Image",
 	"position": 1,
 	"disabled": false,
 	"types": ["image", "small_image", "thumbnail"],
 	"file": "\/m\/b\/mb01-blue-0.jpg"
 }],
 "tier_prices": [],
 "custom_attributes": [{
 	"attribute_code": "image",
 	"value": "\/m\/b\/mb01-blue-0.jpg"
 }, {
 	"attribute_code": "small_image",
 	"value": "\/m\/b\/mb01-blue-0.jpg"
 }, {
 	"attribute_code": "thumbnail",
 	"value": "\/m\/b\/mb01-blue-0.jpg"
 }, {
 	"attribute_code": "url_key",
 	"value": "joust-duffle-bag"
 }, {
 	"attribute_code": "required_options",
 	"value": "0"
 }, {
 	"attribute_code": "has_options",
 	"value": "0"
 }, {
 	"attribute_code": "category_ids",
 	"value": ["3", "4"]
 }, {
 	"attribute_code": "description",
 	"value": "<p>The sporty Joust Duffle Bag can't be beat - not in the gym, not on the luggage carousel, not anywhere. Big enough to haul a basketball or soccer ball and some sneakers with plenty of room to spare, it's ideal for athletes with places to go.<p>\n<ul>\n<li>Dual top handles.<\/li>\n<li>Adjustable shoulder strap.<\/li>\n<li>Full-length zipper.<\/li>\n<li>L 29\" x W 13\" x H 11\".<\/li>\n<\/ul>"
 }]
}

De igual modo podremos obtener otros datos como:

Nombres, ids y códigos de las stores

http://test.magento2.com/rest/V1/store/storeGroups

Obtener una página CMS indicando el id

http://test.magento2.com/rest/V1/cmsPage/2

Consultar todas las categorías

http://test.magento2.com/rest/V1/categories/


Mención especial para la obtención de los productos por criterios de búsqueda.

Todos los productos con un límite de 20

http://test.magento2.com/rest/V1/products?searchCriteria[PageSize]=20

Carga el producto con nombre “Radiant Tee”

http://test.magento2.com/rest/V1/products?searchCriteria[filter_groups][0][filters][0][field]=name&searchCriteria[filter_groups][0][filters][0][value]=Radiant Tee&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

En próximos posts repasaremos como actualizar e insertar datos en nuestro store y la creación de nuestras propias API's para Magento 2.

Profile picture for user admin
Way2 Ecommerce

Expertos en Magento ecommerce. Definimos, desarrollamos, mantenemos y potenciamos tiendas online de la más alta calidad para que tu ecommerce supere todas tus expectativas.

Etiquetas