El Web Service de Prestashop, una API muy poco conocida.

Antes de decidir usar una API en programación hay que examinar qué ventajas e incovenientes ofrece: cómo está implementada, de qué tipo es, cómo está documentada y qué otros beneficios nos aporta.

El Web Service de PrestaShop es un servicio que permite gestionar objetos de PrestaShop (categorías, productos, clientes, pedidos, etc…) y está diseñado para ser utilizado por otros programas como sistemas de gestión para catálogos, pedidos, etc…

En Dejavu tenemos mucha experiencia sincronizando datos entre aplicaciones de muy diversas maneras, adaptándonos a las peculiaridades de cada proyecto. Un ejemplo significativo lo encontramos en la Plataforma Comúsica, donde diariamente leemos más de 20.000 referencias de ocho ERP’s que nos poporcionan datos en formatos muy diferentes(XML, XLS, CSV, …), centralizándolas posteriormente en una base de datos. Finalmente, mediante una API desarrollada por nosotros, servimos el catálogo a tiendas de toda España que se conectan a ella.

Este sistema lleva tres años funcionando de manera óptima. Uno de nuestros próximos proyectos se enfocará en sincronizar A3 (uno de los ERPs más extendidos) con Prestashop, con lo que nos hemos metido de lleno a investigar el Web Service de Prestashop 1.6. Estas son nuestras conclusiones:

erp

VENTAJAS DE UTILIZAR LOS WEB SERVICE DE PRESTASHOP

Es oficial

En nuestros cinco años de experiencia con PrestaShop hemos comprobado que hay una comunidad muy activa desarrollando módulos de todo tipo. Sin embargo, la máxima calidad casi siempre viene de los propios desarrolladores de Prestashop. Se mueven muy rápido, sacando una versión nueva cada dos años intercalados con continuas mejoras y correcciones.

Existen algunos módulos o programas con una solución ad hoc cuyo propósito puede ser similar al del Web Service, pero son soluciones parciales:

  • Son menos ambiciosos y permiten modificar solo unos pocos objetos (el catálogo principalmente).
  • No están pensados para trabajar programáticamente.
  • Se diseñaron con un ERP concreto en mente y no se integran bien con otros o directamente no se integran.

Está completamente integrado

Esto es, en parte, una consecuencia de ser oficial. La clase base ObjectModel ya está preparada para trabajar con el Web Service, lo que hace accesibles todos los objetos de Prestashop. Hay que tener en cuenta que Prestashop 1.6 es la tercera versión en la que se incluye el Web Service y el refinamiento en su implementación se nota.

Es REST

REST es una nomenclatura para determinadas técnicas de implementación de servicios online. Lo que interesa de REST es su visión sencilla. Todo es un objeto y hay cuatro operaciones que se pueden realizar sobre él: recuperar, crear, modificar y borrar.

Esto hace que interactuar con un servicio REST sea relativamente más sencillo y sobre todo más homogéneo que trabajar con SOAP (un protocolo anterior a la definición de REST que también trabaja con XML y que es otra gran alternativa, quedando RPC ya en el pasado). En programación sencillez y homogeneidad proporcionan productividad y robustez.

INCONVENIENTES DE UTILIZAR LOS WEB SERVICE DE PRESTASHOP

Es REST

REST no implica que todo sean ventajas. Determinadas operaciones como la actualización de precios o el stock, son mucho más complicadas que si hubiera implementado con otra arquitectura.

Escasa documentación

Como en otros grandes proyectos open source, la documentación es un punto débil, especialmente la de Web Service. La documentación se reduce a varios artículos muy generalistas que tratan casos muy sencillos, y a unos ejemplos muy básicos que agrupan los mismos casos sencillos de los artículos.

De momento sólo soporta XML

XML es una herramienta muy rígida y, aún con sus muchas ventajas, no resulta idónea para proyectos basados en PHP como Prestashop. PHP tiene un excelente soporte nativo para JSON y, por el contrario, una clase muy básica para XML, por lo que el soporte de JSON sería una mejora notable, que desafortunadamente no parece ser una prioridad.

Velocidad

Esto es una consecuencia de ser REST. Determinadas operaciones, como actualizar el stock de todo un catálogo, son muy lentas y es mejor buscar una alternativa.

Hemos realizado pruebas en un servidor dedicado sin carga ni visitas, llegando a tardar un segundo por cada producto. Si añadimos problemas de latencia y un catalogo medio de 5000 productos habría que esperar más de hora y media, lo cual es inaceptable. Esto es debido a que, al ser REST puro, los productos se actualizan uno por uno y hay que hacer todas las peticiones de manera independiente.

Buscando una solución nos plantearíamos una actualización progresiva y otras optimizaciones. Sin embargo, un módulo de carga de actualización de stock que lo haga en bloque, es mucho más fácil de implementar y bastante más rápido.

No hay eventos

Determinadas acciones como mandar correos de bienvenida o ejecutar otras acciones derivadas del alta de un cliente, no se pueden realizar mediante el Web Service.

Forma parte de PrestaShop

Definir esto como inconveniente puede parecer incongruente, pero no lo es. Si se hacen muchas peticiones puede afectar fácilmente al rendimiento o a la seguridad de la máquina.Es fácil de entender con un ejemplo:

Imaginemos una tienda física. El Web Service sería como un dependiente más que gestiona la entrada de stock y la contabilidad de los pedidos. Pero en lugar recibir el material por la puerta del almacén, lo hace desde el mismo mostrador de la tienda. Cuando se estén descargando las cajas con los productos nuevos, el local, por grande que sea, se llenará de cajas y los clientes apenas tendrán espacio.

Esto mismo es lo que ocurre cuando hay un ataque de denegación de servicio. Se formulan malintencionadamente miles de peticiones para que los clientes legítimos no puedan ser atendidos.

Evidentemente se pueden plantear soluciones pero creemos que puede merecer más la pena buscar otras opciones que implementar dichas soluciones, incluso para proyectos de tamaño medio.

QUÉ HEMOS APRENDIDO

Conclusiones positivas

  • Como herramienta es robusta, sencilla y está bien integrada.
  • Su funcionamiento es correcto. Los objetos se crean, se recuperan, se modifican y se borran correctamente, proporcionando las suficientes razones para decantarse por el en proyectos simples.
  • Es ideal para cargas de datos puntuales y volcados completos desde otros programas, migraciones desde otras tiendas online, o para generar informes diarios. En todas estas situaciones la sencillez y robustez del Web Service supera la lentitud y otras desventajas que antes indicamos.

Conclusiones negativas

  • La documentación oficial es escasa y algo pobre, y buscar en internet no servirá de gran ayuda en este caso.
  • El rendimiento es mejorable y no nos ha convencido. Si contamos con un catalogo amplio, es necesario desarrollar optimizaciones, pues precisamente en situaciones de picos de visitas y/o ventas es cuando más perjudicial resultará que el servidor tarde más de una hora en actualizar el stock.
  • En cuando a la fiabilidad, aunque la operación individual sea robusta y sencilla, operaciones globales sobre el catálogo podrían llevar a implementaciones nada triviales y darnos muchos quebraderos de cabeza.
  • En el caso de interfaz para un ERP, desaconsejaríamos su uso en favor de otras alternativas, o bien, que se analice en profundidad si nos va a compensar dedicar recursos a implementar las optimizaciones y mejoras que comentamos.

2 responses


Deja una respuesta