Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cómo hacer un sitio web WordPress descentralizado

Cómo hacer un sitio web WordPress descentralizado

PoP (https://getpop.org) es un framework de código libre para crear sitios web basados en WordPress, que apunta a romper el monopolio de la información de las grandes redes sociales mediante la vinculación de sitios web autónomos entre sí. Sitios web construidos con PoP tienen una arquitectura descentralizada, lo que les permite de compartir sus datos unos con otros, y los usuarios de los diferentes sitios web pueden interactuar entre sí, sin necesidad de unirse a un servicio centralizado como Facebook o LinkedIn. De esta manera, la unión de todos los sitios crea una red más amplia compuesta por diferentes comunidades, las cuales son dueñas de sus propios datos, almacenándolos en sus propios servidores, y decidiendo cómo compartirlos y con quién.

PoP trabaja combinando WordPress y Handlebars (javascript templates) en un framework con arquitectura MVC. Actuando como controlador, PoP intercepta los resultados de la consulta de datos de WordPress, genera una respuesta en JSON y alimenta este código JSON a Handlebars para ser transformado en HTML. El resultado es un sitio web dinámico, en el que el back-end es completamente WordPress, pero el front-end se construye utilizando javascript.

En esta presentación, veremos una introducción a PoP, cuáles son sus características principales, una descripción técnica de cómo funciona, y analizaremos sus posibles usos, demostrando casos concretos de aplicaciones que se pueden construir usando este software.

Leonardo Losoviz

June 16, 2017
Tweet

More Decks by Leonardo Losoviz

Other Decks in Programming

Transcript

  1. Qué es PoP? PoP combina WordPress y Handlebars en un

    framework con arquitectura MVC, para crear sitios web de tipo Single-Page Application: WordPress es el model/back-end Templates de Handlebars es el view/front-end El PoP engine es el controller
  2. Cómo funciona? 1 PoP intercepta la solicitud del usuario en

    el front-end y lo envía al servidor web utilizando AJAX Front-end Back-end Request Request: AJAX
  3. Cómo funciona? 2 El controlador de PoP procesa la solicitud,

    y obtiene la data de WordPress Front-end Back-end Request Request: AJAX Data
  4. Cómo funciona? 3 PoP genera una respuesta en JSON, y

    alimenta el código JSON hacia el front-end Front-end Back-end Request Request: AJAX Response: JSON Data
  5. Cómo funciona? 4 PoP envía el código JSON a Handlebars,

    quien genera el código HTML usando sus templates javascript, y se lo pasa a PoP. Front-end Back-end Request HTML Request: AJAX Response: JSON Data
  6. Cómo funciona? 5 PoP inserta el HTML en el DOM

    y ejecuta funciones javascript definidos por el usuario de los nuevos elementos. Front-end Back-end Request: AJAX Response: JSON Data Request HTML Response
  7. #1: API PoP proporciona al sitio de WordPress de su

    propia API: Disponible a través de HTTP Simplemente añadiendo a cualquier URL: output=json
  8. #2: Descentralizado La respuesta es un código JSON uniforme Todos

    los sitios web PoP pueden comunicarse entre sí Obtener/processar data en tiempo real Peticiones POST Contenido generado por el usuario es almacenado en el sitio web de fuente.
  9. Red social niche/decentralizada => Twitter/Facebook/Medium/ Reddit (con WooCommerce) Tienda decentralizada

    => Amazon Agregador de contenido => Digg Server back-end para mobile apps Micro-servicios Algunos posibles usos
  10. Single-Page Application Experiencia de usuario similar a una aplicación de

    escritorio Se puede configurar: Cuáles páginas precargar Cuáles páginas peticionar al servidor
  11. HTML desde el servidor La primera carga de la página

    produce HTML desde el servidor A partir de la 2nd página, el SPA toma el control HTML es producido en el cliente usando javascript Isomorfismo de código El mismo código genera el HTML en el cliente y en el servidor
  12. CDN de contenido Contenido dinámico (o mutable) es convertido en

    estático (o inmutable) al servirlo a través de un Red de entrega de contenidos (CDN) Lo mejor de ambos mundos: Contenido aún es generado a través de WordPress Pero se lo puede cachear como si fuera proviniente de un generador de sitios estáticos
  13. Offline first Capacidades Offline first provistos a través de Service

    Workers el sitio web funciona sin conexión a internet el rendimiento aumenta al reducir las solicitudes de red las páginas se cargan inmediatamente (desde el segundo acceso en adelante) Es una Aplicación Web Progresiva (PWA)
  14. Estado de la aplicación Operaciones Read: el estado se mantiene

    en el front-end Operaciones Create/Update/Delete: ejecutadas en el servidor no hay estado dual, no hay necesidad de sincronización
  15. Estado de usuario Aplicación diseñada tanto para usuarios logueados y

    no (aún) logueados Coherente entre páginas con/sin estado de usuario Sincronizado entre pestañas del browser
  16. Flujo de ejecución Model y Controller (lógica de la aplicación,

    flujo de ejecución) reside en el back-end Diferente a javascript frameworks modernos (eg: AngularJS)
  17. Targets Cualquier página puede ser cargada en cualquier pageSection Simplemente

    especificando el atributo “target” en el link, apuntando al pageSection correspondiente
  18. Pestañas Muchas páginas pueden ser abiertas simultáneamente Páginas permanecen abiertas

    hasta ser cerradas Se le pregunta al usuario de re-abrir las pestañas de la sesión anterior
  19. (Pre)carga en el fondo Páginas pre-cargadas, estado del usuario, sincronización

    Vistas iniciales Estado del usuario (logueado => obtener data) Estado del usuario relacionado a la página (eg: Likes) Notifications de usuario Data no cacheable (ej: número de comentarios en el post)
  20. Interceptors Cambia la pestaña a una página ya cargada Renderiza

    vistas inmediatamente Permite deep-linking a funciones javascript, usando una URL real
  21. Diferencias No es RESTful (al menos no actualmente, pero puede

    ser implementado) Links mantienen la misma URL como en WordPress API sin documentación La API pública es provista automáticamente Desarrolladores pueden enfocarse en hacer el sitio web, no la API Carga inmediata (no se necesita una petición extra para traer los datos)
  22. Jerarquía de templates Jerarquía top-down: 1 topLevel contiene N pageSections

    1 pageSection contiene N blocks/blockGroups 1 blockGroup contiene N blocks/blockGroups 1 block contiene N modules 1 module contiene N modules (al infinito)
  23. Template: block Es un componente independiente Mantiene su propio estado

    Puede ser añadido a diferentes pageSections, e individualizado bajo cada uno
  24. Composable module Modules pueden construir unos sobre otros Separación de

    intereses (Separation of Concerns) Collaboración entre desarrolladores
  25. Limpia/Mínima Database => única per topLevel Dataset => único per

    block Variables de estados => únicos per block Configuración => única per pageSection, block y module
  26. Database Mantiene relaciones/estructura entre objetos (no es una estructura plana,

    de un único nivel) Cumulativa Permite no volver a peticionar información ya cargada
  27. “1. Re-aprovechá!” DRY (Don’t Repeat Yourself) WordPress: funcionalidades provistas por

    la comunidad Isomorfismo: frontend/backend/email HTML del mismo código Módulos: todo es re-usable Arquitectura descentralizada: micro-servicios
  28. “2. Desasociá!” Diseño de la vista (Handlebars javascript templates) Configuración

    de la vista Funciones javascript Estilos Base de datos Inyección de dependencias
  29. “3. Cacheá!” Varios niveles de cache: Cache en el servidor

    (WP Super Cache) Cache de configuración CDN de contenido / CDN de recursos Service Workers