Cómo Consultar una API desde la App Móvil de Moodle para Consumir Datos de un Plugin

 La flexibilidad de Moodle se extiende más allá de su plataforma web, llegando a la palma de tu mano a través de su potente aplicación móvil. Pero, ¿qué pasa si quieres que tu aplicación móvil de Moodle muestre datos personalizados generados por un plugin que has desarrollado? ¡La clave está en la consulta de APIs!

En este artículo, exploraremos cómo puedes hacer que tu aplicación móvil de Moodle se comunique con una API para consumir datos generados por un plugin personalizado, abriendo un mundo de posibilidades para la interactividad y la personalización.

El Escenario: Tu Plugin y la App Móvil

Imagina que has desarrollado un plugin en Moodle que recopila información específica, por ejemplo, el progreso detallado de los estudiantes en una actividad no estándar, o datos de un sistema externo que integraste. Ahora, quieres que esta información sea accesible y visualizable directamente desde la aplicación móvil de Moodle, brindando una experiencia más fluida a tus usuarios.

Para lograr esto, tu plugin deberá exponer una API (o un conjunto de funciones web) que la aplicación móvil pueda consultar.

Pasos Clave para Consultar una API desde la App Móvil de Moodle

La comunicación entre la app móvil de Moodle y tu plugin se basa en la exposición de servicios web y la autenticación adecuada. Aquí te detallo los pasos esenciales:

1. Desarrolla un Servicio Web en tu Plugin de Moodle

Este es el primer y más crucial paso. Tu plugin necesita ser capaz de "hablar" con el exterior. Moodle facilita la creación de servicios web que pueden ser consumidos por aplicaciones externas, incluyendo su propia app móvil.

  • Define tus funciones API: Dentro de tu plugin, necesitarás definir las funciones que devolverán los datos que deseas mostrar en la aplicación móvil. Estas funciones deben seguir la estructura y las convenciones de los servicios web de Moodle.

  • Registra tu servicio web: Debes registrar tu servicio web en Moodle para que sea reconocido y accesible. Esto generalmente implica modificar el archivo db/services.php de tu plugin y asegurarte de que las capacidades de Moodle estén correctamente configuradas.

  • Manejo de la autenticación: Los servicios web de Moodle requieren autenticación. La aplicación móvil de Moodle ya maneja la autenticación de usuarios. Tu servicio web deberá estar configurado para aceptar tokens de usuario válidos.

Aquí un ejemplo simplificado de cómo podrías definir una función en tu plugin (dentro de un archivo de servicios web):

PHP
// Ejemplo simplificado en un archivo services.php de tu plugin
function local_myplugin_get_custom_data($userid) {
    global $DB;
    // Aquí iría tu lógica para obtener los datos personalizados
    $data = $DB->get_records('myplugin_custom_data', ['userid' => $userid]);
    return array_values($data); // Retornar un array indexado
}

// Definición de la función para Moodle
$functions = array(
    'local_myplugin_get_custom_data' => array(
        'classname'   => 'local_myplugin_external', // Clase que contiene la función
        'methodname'  => 'get_custom_data',
        'classpath'   => 'local/myplugin/externallib.php', // Ruta a la clase
        'description' => 'Recupera datos personalizados de mi plugin.',
        'type'        => 'read',
        'capabilities'=> 'moodle/myplugin:viewdata', // Capacidad requerida para acceder
        'args'        => array(
            'userid' => new external_value(PARAM_INT, 'ID del usuario')
        ),
        'returns'     => new external_multiple_structure(
            new external_single_structure(
                array(
                    'id' => new external_value(PARAM_INT, 'ID del registro'),
                    'value' => new external_value(PARAM_TEXT, 'Valor personalizado'),
                    // ... otros campos
                )
            )
        )
    )
);

2. Asegura los Permisos y la Configuración del Servicio Web en Moodle

Una vez que tu servicio web está definido en el código, debes habilitarlo y configurarlo en la interfaz de administración de Moodle:

  • Habilitar servicios web: Ve a Administración del sitio > Servidor > Servicios web > Visión general y asegúrate de que los servicios web estén habilitados.

  • Habilitar un protocolo: Normalmente usarás el protocolo REST.

  • Crear un servicio personalizado: En Administración del sitio > Servidor > Servicios web > Servicios externos, crea un nuevo servicio y añade las funciones API que definiste en tu plugin.

  • Asignar usuarios y tokens (para pruebas o escenarios específicos): Aunque la app móvil usa el token de sesión del usuario, para pruebas directas o integraciones específicas, podrías necesitar generar tokens para usuarios.

3. Realiza la Consulta desde la Aplicación Móvil de Moodle

La aplicación móvil de Moodle está diseñada para interactuar con los servicios web de Moodle. Utiliza sus propias capacidades internas para hacer estas llamadas.

La clave aquí es que la aplicación móvil ya tiene la URL de tu sitio Moodle y el token de sesión del usuario autenticado. No necesitas manejar explícitamente la autenticación o construir URLs complejas si utilizas la forma recomendada.

Desde el código de tu componente o página dentro de la aplicación móvil (si estás desarrollando una característica personalizada para la app):

JavaScript
// Ejemplo conceptual (la implementación real puede variar según el framework de la app)
// Esto es un pseudo-código que ilustra la idea

import { CoreSites } from '@features/sites/services/sites';
import { CoreWS } from '@services/ws';

// ... dentro de tu componente o servicio en la app móvil

async function getPluginData(userId) {
    try {
        const site = await CoreSites.getCurrentSite(); // Obtener el sitio Moodle actual
        if (!site) {
            console.error('No hay sitio Moodle activo.');
            return;
        }

        // Llamar a la función del servicio web de tu plugin
        const data = await CoreWS.call('local_myplugin_get_custom_data', {
            userid: userId
        }, {
            // Opciones adicionales, si es necesario
            context: 'course' // Por ejemplo, si los datos son específicos de un curso
        }, site.id); // Pasar el ID del sitio

        console.log('Datos del plugin recibidos:', data);
        // Aquí puedes procesar y mostrar los datos en tu UI
        return data;

    } catch (error) {
        console.error('Error al obtener datos del plugin:', error);
        // Manejar el error, mostrar un mensaje al usuario, etc.
        throw error;
    }
}

// Ejemplo de uso:
// getPluginData(currentLoggedInUserId).then(data => {
//     // Actualizar la interfaz de usuario con 'data'
// });

Puntos importantes sobre la consulta desde la app:

  • CoreWS.call(): Esta es la función principal que utilizarás en el framework de la aplicación móvil de Moodle para llamar a servicios web.

  • Nombre de la función: El primer parámetro es el nombre de la función de servicio web que definiste en tu plugin (ej. local_myplugin_get_custom_data).

  • Parámetros: El segundo parámetro es un objeto con los argumentos que espera tu función API.

  • Contexto y sitio: Es crucial especificar el site.id para que la llamada se realice en el contexto del sitio Moodle correcto.

4. Desarrolla la Interfaz de Usuario en la App Móvil

Una vez que puedes obtener los datos, el siguiente paso es diseñar cómo se presentarán en la aplicación móvil. Esto implica desarrollar la interfaz de usuario (UI) dentro de la arquitectura de la aplicación móvil de Moodle, utilizando los componentes y patrones existentes.

  • Integración en la navegación: Decide dónde encajará esta nueva funcionalidad dentro de la estructura de navegación de la app (una nueva pestaña, una opción en un curso, etc.).

  • Componentes UI: Utiliza los componentes de UI proporcionados por el framework de la app móvil de Moodle (o Ionic/Angular si estás trabajando a ese nivel) para mostrar los datos de manera clara y eficiente.

Consideraciones Adicionales

  • Seguridad: Siempre valida y sanea los datos tanto en el lado del servidor (tu plugin) como en el lado del cliente (la app móvil). Asegúrate de que las capacidades de Moodle restrinjan el acceso a tus datos solo a los usuarios autorizados.

  • Rendimiento: Optimiza tus consultas a la base de datos en el plugin para que sean rápidas. La latencia en la red es un factor importante en las aplicaciones móviles.

  • Manejo de errores: Implementa un manejo robusto de errores tanto en tu plugin como en la aplicación móvil para proporcionar una experiencia de usuario fluida incluso cuando algo sale mal.

  • Caché: Considera implementar un mecanismo de caché en la aplicación móvil para los datos que no cambian con frecuencia, reduciendo las llamadas a la API y mejorando el rendimiento percibido.

  • Actualizaciones del plugin y la app: Si modificas la API de tu plugin, asegúrate de que la aplicación móvil sea compatible o planea las actualizaciones correspondientes para evitar interrupciones.

Cómo Consultar una API desde la App Móvil de Moodle para Consumir Datos de un Plugin


Pasos para Probar tu Servicio Web de Moodle en Postman

Para probar tu servicio web en Postman, necesitarás configurar una solicitud HTTP POST. La API de Moodle generalmente utiliza un endpoint (webservice/rest/server.php) y requiere parámetros específicos.

1. Obtener la URL del Servicio Web de Moodle

La URL base para las llamadas a servicios web de Moodle es:

[URL_DE_TU_MOODLE]/webservice/rest/server.php

Por ejemplo: https://tucurso.moodlecloud.com/webservice/rest/server.php o http://localhost/moodle/webservice/rest/server.php

2. Obtener un Token de Acceso (para pruebas)

Para autenticarte con tu servicio web en Postman, necesitarás un token de acceso. Hay dos formas principales de obtenerlo para pruebas:

  • Generar un token de servicio web para un usuario específico:

    1. Inicia sesión en Moodle como administrador.

    2. Ve a Administración del sitio > Servidor > Servicios web > Gestionar tokens.

    3. Haz clic en "Añadir".

    4. Selecciona un usuario (puedes crear un usuario de prueba si no quieres usar tu administrador).

    5. Selecciona el "Servicio" que has creado (el que contiene tus funciones API, por ejemplo, "Mi Servicio de Plugin").

    6. Genera el token. Cópialo, ya que lo usarás en Postman.

  • Usar el token de depuración: En entornos de desarrollo, a veces se puede habilitar un token de depuración, pero esto no es recomendable para entornos de producción. El método anterior es más seguro y realista.

3. Configurar la Solicitud en Postman

Abre Postman y sigue estos pasos:

  1. Tipo de Solicitud: Selecciona POST.

  2. URL de la Solicitud: Pega la URL del servicio web de Moodle: [URL_DE_TU_MOODLE]/webservice/rest/server.php

  3. Encabezados (Headers):

    • Content-Type: application/x-www-form-urlencoded (Moodle espera datos POST en este formato).

  4. Cuerpo de la Solicitud (Body):

    • Selecciona la opción x-www-form-urlencoded.

    • Añade los siguientes pares clave-valor:

      • wstoken: Pega el token que generaste en el paso 2.

      • wsfunction: El nombre de la función API que definiste en tu plugin (ej., local_myplugin_get_custom_data).

      • moodlewsrestformat: json (para que Moodle te devuelva la respuesta en formato JSON, que es lo más común y fácil de trabajar).

      • Parámetros de tu función: Añade cada parámetro que espera tu función API como un par clave-valor adicional.

        • Ejemplo para local_myplugin_get_custom_data: userid: [ID_DEL_USUARIO_PARA_LA_PRUEBA]

    Ejemplo de cómo se vería el Body en Postman:

    KEY

    VALUE

    wstoken

    tu_token_generado_aqui

    wsfunction

    local_myplugin_get_custom_data

    moodlewsrestformat

    json

    userid

    2 (o el ID de usuario que quieras probar)

Comentarios