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 Access – YES.
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.
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.
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.
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.
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:
Después:
Hola Alejandro. Gracias por la explicación del API
Hola @miguelurquizo:disqus muchas gracias por tu respuesta. Los programas que use y uso a diaro para este tipo de desarrollos son PhpStorm como IDE y para hacer las pruebas de las APIs postman.
Slds,
ALe.