Crear una API para un modelo de datos personalizado en Magento 2

Envio de datos entre tu Magento y Erp

Profile picture for user admin
Por Way2 Ecommerce
10 Feb 2020

En muchas ocasiones nuestro ecommerce Magento está conectado a un ERP/CRM para tener todos nuestros datos actualizados de pedidos, clientes, facturas. Pero ¿cómo averiguamos si nuestras líneas de pedidos se han sincronizado bien? mediante una API.

¿Qué es una API?

Una API (Application Programming Interface) es un conjunto de reglas (código) y especificaciones que las aplicaciones pueden seguir para comunicarse entre ellas: sirviendo de interfaz entre programas diferentes de la misma manera en que la interfaz de usuario facilita la interacción humano-software.

¿Para qué sirve una API?

Desarrollar una API es un ahorro de tiempo y dinero. Tu Magento ecommerce o tu ERP se enriquecerán de datos mutuamente sin que haya que hacerlo a mano. Por ejemplo, el stock de un producto, supongamos que tenemos más de 10.000 referencias en nuestro ecommerce, introducir y actualizar el stock a mano sería totalmente inviable, sin embargo, toda la información respecto a un producto ya la tenemos en nuestro ERP, si hay stock en almacén, precio, colores, sku, etc. Con una API podemos alimentar toda esa información que posee el ERP con nuestro Magento.

¿Cómo crear un endpoint en magento2?

Supongamos que necesitamos que un proceso de nuestro Magento esté disponible mediante una llamada http, realice una serie de acciones, y retorne un conjunto de datos. De forma general, deberemos desarrollar un conjunto de funciones que realicen las acciones que necesitamos. Estos procesos se llaman Endpoints.

Primero de todo dentro de nuestro módulo, dentro del directorio etc creamos el archivo webapi.xml

<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
    <route url="/V1/moduloprueba/prueba" method="GET">
        <service class="W2e\ModuloPrueba\Api\pruebaInterface" method="resultado" />
        <resources>
            <resource ref="anonymous" />
        </resources>
    </route>
</routes>

Lo que realizamos aquí es que mediante una ruta que responderá a un request GET a la url 

<route method="GET" url="/V1/moduloprueba/prueba">

indicamos la clase y el método que responden a esa url

<service class="W2e\ModuloPrueba\Api\PruebaInterface" method="resultado" />

y no se requerirá autenticación para poder acceder

<resource ref="anonymous"/>

Lo siguiente que hay que hacer es crear la interface. para ello en el directorio Api de la raíz de nuestro módulo creamos nuestro archivo pruebaInterface.php:

<?php
 
namespace W2e\ModuloPrueba\Api;
 
interface PruebaInterface
{
    /**
     * Returns a test message
     *
     * @api
     * @return string Pong message.
     */
    public function resultado ();
 
}

Nuestro modelo se ubicará dentro de Model y lo llamaremos Resultado.php:

<?php
 
namespace W2e\ModuloPrueba\Model;
 
use W2e\ModuloPrueba\Api\PruebaInterface;
 
class Resultado implements PruebaInterface
{
 
    /**
     * Returns a test message
     *
     * @api
     * @return string devolucion message.
     */
    public function resultado()
    {
        return "Mensaje devuelto a través de la API";
    }
 

Finalmente tenemos que indicar que modelo llamara a la interface, este paso se realiza en el di.xml que se encuentra en la carpeta etc:

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
	<preference for="W2e\ModuloPrueba\Api\PruebaInterface" type="W2e\ModuloPrueba\Model\Resultado" />
</config>

Si ingresamos la URL en nuestro navegador recibiremos el mensaje de return. Esto es solo la creación de un endpoint que devuelve una cadena a modo divulgativo, pero con esto se pueden devolver pedidos, productos y realizar muchas más gestiones.

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.