Una visión completa del nuevo framework de desarrollo para Alfresco

/ / Blog, Document Management
Una píldora de desarrollo para nuestro curso de formación en Alfresco
Alfresco, nuevo addon para auto-versionado

Hace algunas semanas, Alfresco anunció dos nuevas incorporaciones a su framework de desarrollo:

  • La nueva API REST basada en swagger.io, que es distribuida sin versionar e incluida como parte (no separable) de la aplicación web de Alfresco (alfresco.war)
  • Los nuevos componentes Angular 2 para desarrolladores frontend, que son distribuidos como la mayoría de components npm, utilizando el prefijo ng2-alfresco y liberando versiones con mucha frecuencia
    • Como viene siendo habitual en Alfresco, algunos recursos han sido creados independientemente de los actuales, por lo que el canal IM para alfresco ng2 es Gitter en vez del tradicional IRC

Desde que apareció el post oficial de Alfresco anunciando estas novedades, algunos desarroladores de la Comunidad han escrito excelentes artículos sobre el tema:

A continuación exponemos algunos de nuestros pensamientos en lo relativo a todo este nuevo universo.

alfresco-ng2-swagger.002

El desarrollo en Alfresco antes del advenimiento de esta enorme bola de fuego marciana, estaba basado en tecnologías maduras y confiables:

  • El patrón Web Script para desarrollo REST
  • Java como principal lenguage para el desarrollo del repositorio
  • FTL como lenguage de marcas para construir vistas y páginas
  • CMIS como API estándar reconocida para interactuar con el repositorio
  • AMP como herramienta de empaquetado y despliegue
    • Sin embargo, desde Alfresco SDK 2.2.0 ya se introduce el empaquetado JAR y ha sido anunciado que este tipo de empaquetado será el que prevalezca en el futuro.
  • Maven como herramienta de resolución de dependencias
  • Spring Surf como framework principal para la configuración y extensión de componentes
  • Aikau como principal lenguage de presentación para el desarrollo en Share

Sin embargo, desde ahora, un nuevo catálogo de tecnologías emergentes entra a formar parte de este entramado universo:

  • npm como herramienta frontend para la resolución de dependencias
  • AngularJS 2 como framework frontend (incluye el uso de TypeScript)
  • Swagger.io como framework de desarrollo REST
  • Node.js como framework base para Angular
    • Este framework ha sido elegido también por Alfresco como base para construir su cliente JavaScript para la nueva API REST, aunque la tecnología swagger.io permite construir este cliente en muchas otras tecnologías que quizá puedan ser más adecuadas a escenarios concretos
  • Google Material Design como guía CSS y Bootstrap para proveer la misma experiencia de usuario que todo el resto de plataformas del mercado
  • Yeoman para ayudar a escribir el tedioso boilerplate inicial requerido por las aplicaciones web Angular

alfresco-ng2-swagger.003

Alfresco Angular 2 components, los bloques de construcción para desarrolladores, están disponibles en GitHub y alguna documentación es mantenida en http://devproducts.alfresco.com/browse. Por ahora, se dispone del siguiente catálogo:

  • Core library, como base para el resto de componentes
  • DataTable, para mostrar diferentes datos de Alfresco en este tipo de estructuras
  • DocumentList, como alternativa a la Librería de Documentos de Share
  • Viewer, una nueva implementación de PDF.js
  • Login, que actualmente solo incluye el tratemiento de credenciales de Alfresco pero que carece de
    • Integración de credenciales de Activiti
    • Mecanismos de SSO
  • Upload, que incluye alguna nueva funcionalidad como la subida de carpetas

Esta lista no está cerrada, ya que existen otras muchas funcionalidades que actualmente son ofrecidas por Alfresco Share que serían difícilmente implementables contando solo con estos bloques de construcción.

alfresco-ng2-swagger.004

Como anticipamos antes, escribir aplicaciones Angular desde cero no es una tarea fácil (o al menos no es una tarea entretenida). Hay que escribir y configurar un montón de código boilerplate antes de comenzar con la programación en serio.

Alfresco provee dos generadores Yeoman para hacer más fáciles estas tareas:

alfresco-ng2-swagger.005

Una vez que se hayan conseguido instalar y configurar todos los requisitos derivados de node en el entorno de desarrollo, puede generarse una aplicación de prueba utilizando el comando yo. La aplicación generada sigue fielmente las directrices de Google Material Design, por lo que provee una experiencia de usuario exactamente igual que otros muchos interfaces de otros muchos productos.

Desde nuestro punto de vista, en el caso de Alfresco, esta es la peor decisión que se ha tomado en la concepción de todo este universo. Ser como los demás te proporciona ciertas ventajas, pero para un líder como Alfresco puede suponerle convertirse en un tipo tan gris como los demás.

alfresco-ng2-swagger.006

Estos fuegos artificiales que adornan el front end, se alimentan de un framework de servicios que actualmente es provisto por Alfresco como un componente node adicional:

Sin embargo, swagger.io provee muchas otras funcionalidades que no han sido suficientemente expuestas por Alfresco:

  • Editor online y offline editor para descripción YAML de la API REST
  • Implementación del core de la API REST en tecnología Java o en cualquier otro lenguaje
  • Generación mediante codegen de un cliente para muchos frameworks y lenguajes de desarrollo (incluye el seleccionado por Alfresco para los componentes ng2 Node.js)
  • Interfaz Web para explorar y probar la API REST completa

Asimismo, swagger.io se ha convertido como producto en un nuevo estándar ampliamente adoptado. Se ha llamado OpenAPI y consolida la apuesta de Alfresco por la utilización de los mejores estándares del mercado.

alfresco-ng2-swagger.007

Años antes de que estos componentes ng2 llegasen al universo de Alfresco, el equipo de Activiti había estado desarrollando una aplicación web en Angular. Esta aplicación esá plenamente consolidada en la versión Enterprise, pero sigue estando únicamente disponible como beta (desde hace algo más de 6 meses) en la versión Community:

La API REST de Activiti no fue diseñada usando swagger.io o YAML. A pesar de ello, parace lo suficientemente madura para ser usado con los nuevos componentes ng2 de Alfresco, ya que funciona intensivamente en entornos Node.js.

Adicionalmente, Activiti utiliza invocaciones REST para recuperar datos de fuentes externas, lo que hace que este producto esté perfectamente preparado para integrarse en este nueva filosofía.

alfresco-ng2-swagger.008

Esta nueva filosofía incluye un interfaz de usuario por componentes que se alimenta de una fuente de datos interconectada por servicios REST.

Suena a una aplicación de los reiterados conceptos de microservicios a las aplicaciones web, lo que permite que los desarrolladores provean visiones unificadas de usuario en entornos de trabajo complejos.

alfresco-ng2-swagger.010

Actualmente tanto los componentes ng2 como la API REST están en periodo de acceso previo, aunque Alfresco ha comunicado que la versión 1.0 de ambos será liberada en Noviembre de 2016.

Desde nuestro punto de vista, este primer estadío no estará completo con la 1.0, por lo que una nueva versión 2.0 será requerida para completar el ciclo de desarrollo.

alfresco-ng2-swagger.011

Dado que muchos clientes seguirán usando Alfresco Share durante los próximos años, será requerido proveer una fuerte integración entre aplicaciones web Angular y la tecnología Aikau (base de Alfresco Share). Asimismo, será también requerida una consolidación tecnológica de Alfresco Share, ya que actualmente aún incluye frameworks obsoletos como YUI o FTL.

Para obtener una plataforma uniforme, swagger.io deberá ser el único backend para ambos (y para cualquier otro). La experiencia de usuario podrá ser conseguida mediante la aplicación de los criterios de Google Material Design a la parte de Alfresco Share.

 

De esta manera, aunque un desarrollador Alfresco deberá aprender muchas tecnologías diferentes en adelante, la posibilidad de proveer una solución única para cualquier caso de uso hará que merezca la pena el esfuerzo.

Unidad de negocio, keensoft

1 Comment to “ Una visión completa del nuevo framework de desarrollo para Alfresco”

  1. […] y como comentamos hace un tiempo, la liberación de los componentes de desarrollo de Alfresco (ADF) para tecnologías Angular JS y […]