Entity Share
Entity Share permite compartir contenido entre múltiples sitios web Drupal utilizando JSON:API. Proporciona canales en el lado del servidor e interfaces de extracción en el lado del cliente para sincronizar entidades entre sitios.
entity_share
Install
composer require 'drupal/entity_share:8.x-3.13'
Overview
Entity Share es un módulo integral que permite compartir contenido entre múltiples sitios web Drupal utilizando JSON:API. El módulo sigue una arquitectura servidor-cliente donde un sitio web puede actuar como "servidor" (proporcionando contenido a través de canales) y otro como "cliente" (extrayendo contenido de los servidores). Un único sitio web también puede actuar como servidor y cliente simultáneamente.
El módulo proporciona una interfaz completa para gestionar canales del servidor con filtros, ordenamientos, búsquedas y controles de acceso personalizables. En el lado del cliente, ofrece gestión de sitios web remotos, configuración de importación con un pipeline basado en procesadores y seguimiento del estado de importación de entidades. Las características avanzadas incluyen visualización de diferencias entre entidades locales y remotas, bloqueo de importación para prevenir la edición de contenido importado y capacidades de importación asíncrona mediante procesamiento en cola.
Entity Share soporta múltiples métodos de autorización incluyendo OAuth 2.0, Basic Auth, autenticación basada en encabezados y acceso anónimo. El módulo también proporciona mejoradores de campos JSON:API para tipos de campos complejos como metatags, campos pathauto, campos de bloque y entidades embebidas.
Features
- Compartición de entidades basada en JSON:API entre sitios Drupal con soporte CRUD completo
- Configuración de canales del lado del servidor con filtros, ordenamientos, búsquedas y grupos de filtros
- Gestión de sitios web remotos del lado del cliente con múltiples métodos de autorización (OAuth, Basic Auth, Header, Anónimo)
- Configuración de importación con pipeline de importación de entidades basado en procesadores que soporta etapas de pre-proceso, proceso y post-proceso
- Seguimiento del estado de importación de entidades con capacidades de detección de cambios
- Soporte de importación asíncrona de entidades mediante workers de cola
- Visualización de diferencias lado a lado de versiones de entidades locales y remotas
- Bloqueo de importación para prevenir la edición de contenido sincronizado
- Mejoradores de campos JSON:API para metatag, pathauto, campo de bloque y entidades embebidas
- Comandos Drush para importaciones de entidades basadas en CLI
- Integración con Views para gestión del estado de importación
- Soporte para tipos de campos complejos incluyendo paragraphs, referencias a entidades, archivos y media
Use Cases
Distribución de contenido multi-sitio
Configure un centro de contenido central como Entity Share Server con múltiples sitios regionales o departamentales como clientes. Los editores de contenido crean artículos en el centro, luego los editores regionales extraen el contenido relevante a sus sitios. Cada sitio regional puede tener diferentes configuraciones de importación para manejar requisitos locales como el manejo de traducciones o políticas de contenido.
Sincronización de contenido de staging a producción
Use Entity Share para sincronizar contenido desde un entorno de staging a producción. Configure el sitio de staging como servidor con channels para contenido revisado. Producción actúa como cliente, extrayendo solo contenido aprobado. Las configuraciones de importación pueden omitir contenido ya importado y prevenir sobrescrituras de entities modificadas localmente.
Agregación de contenido de múltiples fuentes
Configure un sitio como cliente conectándose a múltiples servidores Entity Share (diferentes departamentos, socios o fuentes de contenido). Cada remoto tiene su propia configuración de autenticación. Las configuraciones de importación pueden personalizarse por fuente para manejar diferentes estructuras de contenido o políticas.
Distribución de contenido para CMS headless
Use Entity Share Server para exponer channels de contenido desde un CMS Drupal headless. Múltiples aplicaciones de capa de presentación pueden extraer contenido a través de los channels basados en JSON:API. Esto proporciona un mecanismo estandarizado de sincronización de contenido más allá de las operaciones básicas de lectura de JSON:API.
Respaldo y recuperación de contenido
Configure Entity Share entre sitios primario y de respaldo para redundancia de contenido. El sitio de respaldo extrae periódicamente contenido del sitio primario usando comandos Drush en tareas cron. El seguimiento del estado de importación asegura que solo se sincronice contenido modificado, y la función de diferencias permite verificar la integridad del contenido.
Compartición selectiva de contenido entre sitios asociados
Organizaciones con relaciones de asociación pueden compartir tipos de contenido específicos a través de channels cuidadosamente configurados con controles de acceso. Los channels pueden restringirse a usuarios o roles específicos en el lado del servidor, y los clientes pueden configurarse con la autenticación apropiada. Las políticas de importación controlan cómo el contenido compartido se integra con el contenido local.
Tips
- Use autenticación OAuth para entornos de producción en lugar de Basic Auth para mayor seguridad
- Configure filtros de channel para limitar el contenido expuesto y reducir la sobrecarga de importación
- Establezca una profundidad de recursión apropiada en el procesador Entity Reference para equilibrar completitud con rendimiento
- Habilite el procesador Skip Imported para evitar reprocesar contenido sin cambios en importaciones posteriores
- Use la función de diferencias para revisar cambios antes de importar contenido actualizado
- Considere usar el módulo Key para almacenamiento de credenciales en implementaciones multi-entorno
- Configure comandos Drush con cron para sincronización automatizada de contenido
- Use grupos de filtros con conjunciones AND/OR para lógica de filtrado de channel compleja
- Configure búsquedas en channels para permitir que los editores de contenido encuentren contenido específico fácilmente
- Monitoree las entities de estado de importación para rastrear el estado de sincronización e identificar problemas
Technical Details
Admin Pages 10
/admin/config/services/entity_share
Centro de configuración principal del módulo Entity Share. Proporciona enlaces a todas las páginas de configuración de Entity Share, incluyendo canales, sitios web remotos, configuraciones de importación y ajustes de diferencias.
/admin/config/services/entity_share/channel
Listar y gestionar canales del servidor para compartir contenido. Cada canal expone un tipo de entidad y bundle específico a través de JSON:API. Los canales pueden configurarse con filtros, ordenamientos, búsquedas y controles de acceso.
/admin/config/services/entity_share/channel/add
Crear un nuevo canal para exponer entidades para compartir.
/admin/config/services/entity_share/remote
Listar y gestionar conexiones a sitios web remotos para extraer contenido. Configurar la URL del sitio remoto y el método de autorización.
/admin/config/services/entity_share/remote/add
Configurar una conexión a un servidor Entity Share remoto.
/admin/config/services/entity_share/import_config
Listar y gestionar configuraciones de importación que definen cómo se procesan las entidades durante la importación. Cada configuración contiene un conjunto de procesadores con ajustes específicos.
/admin/config/services/entity_share/import_config/add
Crear una nueva configuración de importación con ajustes de procesadores.
/admin/content/entity_share
Interfaz principal para extraer entidades de sitios web remotos. Seleccionar un remoto, elegir un canal, buscar y filtrar entidades, luego importar el contenido seleccionado.
/admin/content/entity_share/statuses
Ver información de seguimiento de entidades importadas. Muestra tipo de entidad, bundle, UUID, remoto de origen, canal y tiempo del último cambio.
/admin/config/services/entity_share/diff
Configurar los ajustes de visualización de diferencias para la comparación de entidades.
Permissions 8
Hooks 1
hook_entity_share_server_channel_list_alter
Permite a los módulos modificar la lista de canales devueltos a los clientes.
Drush Commands 2
drush entity-share-client:pull
Obtiene todas las entidades de un canal en un sitio web remoto.
drush entity-share-client:pull-entities
Obtiene entidades específicas por UUID de un canal.
Troubleshooting 8
Verifique que la URL del remoto sea correcta y accesible. Compruebe que el método de autorización esté correctamente configurado con credenciales válidas. Asegúrese de que el usuario autenticado en el remoto tenga el permiso 'Access channels list'. Revise la consola del navegador en busca de errores CORS si los sitios están en diferentes dominios.
El usuario autenticado en el servidor remoto necesita acceso de visualización a las entities que se están extrayendo. Para nodes, esto típicamente requiere 'View published content' u otros permisos apropiados de acceso a nodes. Para menu links, instale el módulo Menu Link Content View Access.
Habilite el procesador Entity Reference en la configuración de importación. Verifique la configuración 'Max recursion depth' - puede necesitar incrementarse para referencias profundamente anidadas. Para paragraphs, asegúrese de que el procesador Embedded Entity Importer esté habilitado.
Habilite el procesador Physical File. Asegúrese de que el servidor remoto permita descargas de archivos y que el sitio cliente tenga los permisos apropiados del sistema de archivos. Verifique que el usuario autenticado pueda acceder a las entities de archivo en el remoto.
El seguimiento del estado de importación se basa en el UUID de la entity y el idioma. Si las entities fueron eliminadas y recreadas localmente, o si las entities de estado de importación fueron limpiadas, aparecerán como nuevas. El servicio de importación rastrea el estado por combinación de remoto/channel.
Verifique todas las credenciales OAuth (client ID, secret, endpoints). Asegúrese de que el módulo Simple OAuth esté correctamente configurado en el servidor con la configuración de cliente correspondiente. Compruebe que el nombre de usuario/contraseña para Resource Owner Password Credentials grant sean correctos.
Verifique la configuración de Entity Share Diff para la configuración de líneas de contexto. Asegúrese de que tanto las entities locales como remotas existan. La función de diferencias requiere que la entity haya sido previamente importada para tener una versión local para comparación.
Asegúrese de que cron se esté ejecutando regularmente en el sitio. Verifique el estado de la cola en Database logging. La cola entity_share_async_worker necesita ser procesada. Considere aumentar los límites de memoria PHP para importaciones grandes.
Security Notes 7
- Almacene credenciales OAuth y claves API usando el módulo Key en lugar de en config para sitios de producción
- Restrinja los permisos 'Administer channel entity', 'Administer remote website entity' y 'Administer import config entity' solo a administradores de confianza
- Los controles de acceso a channels deben configurarse para limitar qué usuarios pueden acceder al contenido vía JSON:API
- Considere restricciones a nivel de red (firewall, VPN) para compartición de contenido entre entornos sensibles
- El permiso 'Display technical errors' solo debe otorgarse a desarrolladores ya que puede exponer detalles sensibles de las solicitudes
- Revise las políticas de contenido importado para asegurar flujos de trabajo apropiados de propiedad de contenido y moderación
- Los tokens y credenciales OAuth deben rotarse periódicamente siguiendo las mejores prácticas de seguridad