Abriendo la cancha de las APIs en Magento2

REST

Uno de los últimos proyectos con los que me tope fue un desarrollo de la modalidad “headless” en el cual no dudamos de usar Magento 2 potenciando una de las mejoras mas notorias: las APIs (no vamos a profundizar mucho mas en las APIs en este momento).

A lo que tuvimos que abrir la cancha de mucha información que necesitábamos popular. Como ya pudimos ver en el articulo Autenticando nuestro endpoint en la API de Magento2, podíamos cambiar la visibilidad de nuestros enpoints. En este caso lo que vamos a ver es como podemos mostrar información que Magento la tiene protegida.

A continuación vamos a ver como podemos mostrar esa información.

 

Out Of The Box

Acompañado a la oportunidad de potenciar todas las APIs de Magento 2, por Stores > Configuración podemos setear publicas un montón de endpoints que dependiendo de el alcance de nuestro implementación ya no hace falta mas nada para poder contar con la información.

Para cambiar esa configuracion tenemos que ir a Services > Configuration > Magento Web API > Web API Security > Allow Anonymous Guest AccessYES.

Configuración de Seguridad de la API en Magento2

Como podemos apreciar, en el comentario este flag solo nos da acceso a los endpoints de CMS, Catalog y STORE APIs. Digamos que para nuestra implementación nos da y nos sobra.

Endpoint de CMS en Magento2

Resultado sin cambiar. Como pueden ver la KEY de authorization está uncheck, por lo tanto el mensaje de error de no tener acceso es lo que se nos muestra en la pantalla.

Luego de actualizar la opción a YES (si estamos con las cache prendidas vamos a tener que limpiar para que se refleje el cambio), el resultado es totalmente diferente, como podemos ver en la siguiente imagen, la información se muestra sin problema.

Endpoint de CMS en Magento2

 

Agregar endpoints a la lista de “Allow Anonymous Guest Access”

Digamos que con la funcionalidad OOTB para acceder a los endopoints seguimos sin tener el acceso publico del endpoint que nos interesa, en mi caso uno de los que tuve que ver para ser publico era la búsqueda de un CMS BLOCK. Para lograr eso, lo que hice fue agregar ese endpoint a la lista de endpoints que están asignados a la configuración “Guest Access”.

Con un poco de research lo que Magento hace para tener esa flag de abrir o no los endpoints es usar un plugin llamado webapiResourceSecurity que esta anotado a Magento\Webapi\Model\Config\Converter con la funcion afterConvert, en donde afterConvert si esta prendido el allow guest access es consumir un array inyectado de enpoints definido.

Endpoints habilitados para acceso Guest en Magento2

La forma de agregar un endpoint nuevo es hacer nuestro modulo y agregar mas argumentos a la lista. Me voy a saltear el paso de cómo crear un módulo custom para nuestro Magento 2, una vez que tengamos nuestro modulo (en mi caso lo llame AM_AllowGuestAccess) lo que tenemos que hacer es en di.xml agregar un nuevo argumento a el array de la lista.

Definición de un endpoint custom en Magento2

Volvemos a nuestra linea de comando y ejecutamos setup:upgrade (en mi caso como estaba con las cache ON, también recomiendo que las limpien) y vamos a poder ejecutar el método search de un BLOCK.

Antes:

Acceso a endpoint restringido en Magento2

Después:

Acceso a endpoint restringido en Magento2