Zum Inhalt springen

Reacciona a webhooks con EXT:reactions

desde TYPO3 12.1

Hay una nueva adición a la familia TYPO3: TYPO3 12.1 introduce la nueva extensión del sistema de reacciones. Esto hará posible en el futuro crear y editar registros de datos en TYPO3 a través de webhooks, pero también iniciar otras tareas como una importación o recuperar cierta información de estado de TYPO3.

Webhooks son solicitudes (peticiones web) a un sistema con el fin de completar tareas predefinidas. Es posible que ya conozcas los webhooks de Github, porque también puedes configurar webhooks allí para que, por ejemplo, la nueva versión se actualice automáticamente en Packagist después de un despliegue o se renderice una nueva versión de la documentación de tu extensión.

Actualmente (02.12.2022) TYPO3 sólo se entrega con un tipo de reacción predefinida. Este tipo se puede utilizar para crear ciertos registros de datos, tales como páginas, categorías, elementos de contenido o colecciones de archivos. El nuevo sistema ya viene con su propio registro de reacciones, por lo que es sólo cuestión de tiempo que el propio TYPO3 ofrezca más tipos de reacción o que la comunidad TYPO3 amplíe este sistema con más tipos de reacción mediante extensiones.

Crear un nuevo registro de datos de Reacción

EXT:reactions incluye un nuevo módulo backend que puede utilizar para crear y editar reacciones. Haga clic en "Crear nueva reacción" en la parte superior del módulo Reacciones. Allí podrá seleccionar el tipo de reacción del que se encargará la reacción. Como he dicho, actualmente sólo está disponible el tipo"Crear registro de base de datos". Para el nombre y la descripción, puede describir la reacción más detalladamente con sus propias palabras, como por ejemplo "Crear categoría desde Shopware". El identificador se rellena automáticamente por TYPO3 y no se puede cambiar. La reacción puede identificarse unívocamente a través de este identificador y es una parte obligatoria de la solicitud posterior. En el campo Secreto, haga clic en el pequeño icono Generar para crear un nuevo token de autorización para esta reacción. Atención: copie el código de autorización en algún lugar, ya que sólo se mostrará una vez. Después de guardarlo, ya no tendrá acceso a él y la base de datos sólo contendrá un hash argon2id que no podrá utilizar para la solicitud. Si ha perdido el token, genere uno nuevo utilizando el icono Generar y guarde el registro de datos.

Más abajo, seleccione la tabla en la que se creará el nuevo registro de datos. Utilice Storage-PID para especificar en qué carpeta del sistema (PID) deben almacenarse los nuevos registros de datos y seleccione un usuario en el campo Impersonate User a cuyo nombre deben crearse los nuevos registros de datos. Asegúrese de que el usuario tiene todos los derechos o está asignado a un grupo correspondiente que esté autorizado a crear los nuevos registros de datos. Si lo desea, puede comprobarlo manualmente.

Dependiendo de la tabla que haya seleccionado, aparecerá ahora un número diferente de campos adicionales, que podrá rellenar con valores por defecto. Si no desea crear siempre el mismo registro de datos con el mismo título y descripción con la reacción, tiene la opción de utilizar marcadores de posición que pueden rellenarse dinámicamente con datos de la solicitud (la carga útil). Más adelante hablaremos de ello.

Después de guardar, su nueva reacción aparece en la vista de lista del módulo Reacciones.

Llamada a la reacción

En la vista de lista del módulo Reacción, puede ver la URL que debe utilizar para la llamada de cada registro de datos de Reacción. Ejemplo:

https://typo3git.ddev.site/typo3/reaction/baf6b616-e1ea-48d6-ab45-f8562e8028a7

Para ver un ejemplo completo de una petición cURL, haga clic en Ejemplo:

curl -X 'POST' \
    'https://typo3git.ddev.site/typo3/reaction/baf6b616-e1ea-48d6-ab45-f8562e8028a7' \
      -d '{"my-payload":"my-value","field-b":"my-input"}' \
      -H 'accept: application/json' \h
      -H 'x-api-key: ***su-secreto***'

Debe sustituir la sección ***su-secreto*** por el token de autorización que creó con el icono de generación. Si ahora ejecutas este comando shell en una ventana de terminal, la ejecución debería ser reconocida con {"success":true} y encontrarás un conjunto de datos recién creado en tu carpeta de sistema definida anteriormente.

Valores dinámicos mediante carga útil

En lugar de utilizar valores predeterminados fijos para los campos, tiene la opción de acceder a los datos desde la carga útil. Para ello existe esta sintaxis ${ruta}

Echemos otro vistazo a un comando cURL:

curl -X 'POST' \
    'https://typo3git.ddev.site/typo3/reaction/baf6b616-e1ea-48d6-ab45-f8562e8028a7' \
      -d '{"category":{"title": "Cars", "desc": "wromm wromm"}}' \
      -H 'accept: application/json' \
      -H 'x-api-key: 25356c33f500f092daf65d0091eb90af6e9c3a78'

Con la opción "-d" puede añadir datos adicionales a esta solicitud POST. Estos datos deben especificarse en formato JSON y se convierten internamente en un array. Esto también puede ser una matriz anidada múltiple, como se muestra arriba.

TYPO3 ya proporciona una sintaxis de ruta correspondiente para extraer un valor específico, incluso en grandes matrices anidadas múltiples. Para acceder al título de la categoría en la solicitud de arriba, debe utilizar el siguiente marcador de posición: ${category.title}. Depende de usted vincular este valor con otro valor predefinido: Shopware category: ${category.title}

Cree sus propios tipos de reacción

Según Services.yaml de la extensión reactions, sólo es necesario crear una nueva clase PHP que implemente la interfaz \TYPO3\CMS\Reactions\Reaction\ReactionInterface. A esta clase se le asigna automáticamente la etiqueta reactions.reaction mediante inyección de dependencias y se pone a disposición en el ReactionRegistry, ampliando así la selección de tipos de reacción en el menú de selección del conjunto de datos de reacciones.

Entre otras cosas, la interfaz "obliga" a crear un método react. La solicitud completa, la carga útil preparada (los datos como una matriz) y el conjunto de datos de reacción como un objeto ReactionInstruction se ponen a su disposición como argumentos. Los valores que no pueden recuperarse como método getter en el objeto ReactionInstruction deben recuperarse utilizando el método toArray(): toArray()['mi_valor_especial'] ?? ''

Aktualisiert: 17.07.2024