• Home
  • PFC
  • Computer
  • General
  • Personal
  • Posts RSS
  • Comments RSS
Blue Orange Green Pink Purple

Featured content

¡Ves a http://elfiberhabla.net para seguir mi blog! Esta web ya no es activa!

Nos trasladamos a un Wordpress!

Sí señores, el blog este se traslada a la siguiente dirección: http://elfiberhabla.net

He decidido instalar un wordpress en un servidor independiente ya que wordpress me parece muchísimo mejor y más personalizable. La nueva página, con estilo Windows Vista, está compuesta por una barra como si de un sistema operativo se tratase, con opciones para poder personalizar el aspecto de la página y un buscador y todo.

Espero que os mole la nueva pag :D

Read More 0 comments | Posted by Davigetto | edit post

Reunión 09/03

  1. Adopción (finalmente) de un test-driven development en el desarrollo del Web Service de Moodle. Primero se hacen los unit tests, y luego se desarrolla. Gracias a esta metodologia, los requisitos del sistema y las funcionalidades que debe tener se definen con bastante seguridad desde el principio.
  2. Me traspasan del desarrollo de módulos al desarrollo más activo, a Core.
  3. Moodle ha decidido que el protocolo de REST que tienen ellos implementado es ineficaz ante ciertos problemas, y se intentará readoptar el protocolo que David y Ferran implementaron hace un año. Tengo que ver cómo podemos realizar esta readaptación y qué cambios puede conllevar a la arquitectura de descripción por PHPDOC. Este cambio significará mejoras como la posibilidad de poder utilizar funciones múltiples.
  4. Debido al cambio anterior, hay que tener cuidado. Las arrays de funciones múltiples no deberían ser asociativas (no deben tener una clave por cada ID de usuario, por ejemplo.
  5. Originalmente, REST funcionaba sólo por POST. La idea es hacer algo más descriptivas las peticiones, y que también se permita el uso de PUT y DELETE en las peticiones HTTP. Hay que modificar el optional_param y required_param para que permitan esto.

También me han sido asignados varias tareas en la wiki:

  1. Petr Skodä ha cambiado el diseño de la base de datos de la wiki. Esto afecta directamente a la migración, y hay que adaptarla a los nuevos cambios para que vuelva a funcionar correctamente.
  2. Efeméride: creando un fichero settings.php dentro de cualquier módulo creas una nueva configuración para ese módulo.
Read More 0 comments | Posted by Davigetto | edit post

Reunión 03/03

Montado servidor git donde subir los archivos desarrollados para el Webservice del foro.

Read More 0 comments | Posted by Davigetto | edit post

Testing de los protocolos WS contra el foro - 02/03

  1. Finalizado testing de permisos del foro y de sus funcionalidades. Todo correcto.
  2. Testing del protocolo REST contra el foro: Éxito. Testing protocolo SOAP y XMLRPC: Fracaso debido a que la capa implementada de estos protocolos por parte de la gente de Moodle no funciona correctamente en carpetas más profundas (en /user funciona, pero en /mod/forum no, por ejemplo).
Read More 0 comments | Posted by Davigetto | edit post

Cambios en la arquitectura del Web Service - 26/02

Cambios en la arquitectura

  1. Sustitución de la array descriptions para describir los parámetros de entrada/salida del WebService, anteriormente definida en la capa external, por PHPDOC, facilitando así tanto la construcción de las descripciones como la documentación de las funciones de cara al desarrollador final.
Read More 0 comments | Posted by Davigetto | edit post

Python y PHPUnit Testing - 17/02

  1. Creación de una aplicación en python para poder probar el Webservice en REST.
  2. Creación de varios Unit Tests para probar el webservice de forma ágil - test de permisos y de funcionalidad de las operaciones implementadas para el foro de Moodle.
Read More 0 comments | Posted by Davigetto | edit post

Interoperabilidad en Moodle 2.0 (15/01 - 27/01)

Una vez terminado mi trabajo para la wiki 2.0 (estuve trabajando en la parte de migración que consistía en migrar las bases de datos de otras wikis como Ewiki o la antigua Nwiki hacia la nueva wiki), ahora he sido redirigido a la última parte del proyecto de final de carrera: Ayudar en el desarrollo de la capa de Interoperabilidad para Moodle 2.0 (más conocido como Web Services).

Cada vez más usuarios y organizaciones utilizan Moodle, y estos cada vez utilizan otras plataformas de acceso, ya sea un móvil, cómo una wii, un iPhone... Esta capa garantizará independencia tecnológica que permitirá a estos dispositivos "hablar" con Moodle, "interoperar". Antes Moodle era una aplicación monolítica y todo funcionaba desde la propia aplicación Moodle.

Esto puede derivar en un amplio abanico de posibilidades: Los desarrolladores podrán crear clientes que puedan interactuar con Moodle.

Ejemplo:

  1. Moodle está hecho en PHP, y el Web Service estará implementado de la misma forma. Y tenemos a la FIB, una facultad que tiene Moodle instalado para sus estudiantes, y (por decir algo) una aplicación de automatrícula hecha en Python, y desearía que, a la vez que se matriculan los estudiantes, se cree un usuario automáticamente, sin necesitar que haya un becario que haga el trabajo de ir creando a los estudiantes en el Moodle uno a uno.
  2. De forma "directa", no puedes hacer que una aplicación escrita en Python se comunique con otra aplicación escrita en PHP. Sin webservices, nuestro objetivo es difícil de conseguir.
  3. Con Web Services podemos conseguirlo. Imaginemos que Moodle dispone de un servicio que es "crear usuario". La aplicación en Python utilizaría ese servicio (transmitiéndole los datos necesarios), y Moodle le contestaría a la aplicación diciéndole si ha habido éxito en la inserción o no, y posibles errores.

Y todo eso, cómo se hace?

Hay varios tipos de protocolos que permiten esto: REST, SOAP, OKI, XML-RPC... De momento, sólamente hay implementado parcialmente REST y SOAP. Estos són los encargados de comunicarse con los clientes. Los clientes mandan la petición en un formato estándar (ya sea en una petición HTTP como en REST, o una petición HTTP + un XML como en SOAP), y el Web Service contesta con un XML con los resultados.

Aquí pongo un esquema de lo que sería la comunicación:

Una vez realizada esta pequeña introducción a los Web Services, pasemos otra vez a Moodle y el trabajo que hay que desarrollar.

En esta capa de Interoperabilidad habrá protocolos REST, SOAP, OKI... cada uno de estos componentes invocará las operaciones de dominio y devolverá resultados. Las operaciones de dominio, por supuesto, serán comunes (se hace una implementación única para todos los protocolos). Estas operaciones que se ponen a disposición del Web Service se conoce como API (application programming interface, un conjunto de operaciones o rutinas que sirven para soportar el desarrollo de aplicaciones).

En este dibujo mostramos cuál será la estructura interna de los WebServices:

  • Estará compuesto por tres capas:
    • la Externa, la Media y la Core. En la externa (ubicada en la carpeta /webservices) se encontrarán los protocolos (REST en /webservices/rest, SOAP en /webservices/soap,...). Esta capa tiene por objetivo analizar la petición del cliente, y llamar la función correspondiente del external.php
    • La capa media está compuesta por varios fichero external.php, un fichero external.php por cada parte de la aplicación (/admin/external.php, /user/external.php, /mod/forum/external.php,...). Estos ficheros se encargan de tratar los parámetros que le llegan de la capa externa y pasarselos a la capa de core.
    • La capa core está compuesta por ficheros api.php, un fichero por cada parte de la aplicación, como en el caso del external.php. Estos ficheros son lo que sería la antigua lib.php, el fichero donde se implementan las funciones para acceder a base de datos o ejecutar diferentes acciones.

Cómo implementaremos esto?

El siguiente esquema explica cual será el funcionamiento básico de una petición:

  1. El protocolo no guarda estado. Esto significa que en cada petición el cliente deberá autentificarse enviando su usuario y su password. Una vez autentificado, el protocolo devolverá un "token", que autentificará al cliente durante toda la petición.
  2. El cliente llama una función concreta del Web Service, enviando el nombre del módulo, función a llamar y parámetros, incluído el token.
  3. El protocolo utiliza el token para verificar que la sesión es válida y activa.
  4. El protocolo llama a la función externa correspondiente, ubicado en el external.php del módulo correspondiente.
  5. La función en external.php comprueba que el usuario realmente está autorizado a realizar dicha acción.
  6. La función externa llama a la correspondiente función en core.
  7. Y el resultado de la función es devuelto al externo, de externo al protocolo, y del protocolo al cliente./li>

Aquí tenemos el diagrama de secuencia que correspondría al ciclo de una petición (almenos en REST, y supongo que será un esquema compartido por todos los protocolos):

La solución de la implementación para el caso de la capa media y de core (la implementación de la capa de protocolo porque depende del protocolo) es la siguiente:

  • external.php:
    • Se usa una convención de nombres para el nombre de las clases: las clases tendrán la terminación "_external", y delante llevarán el nombre del módulo en cuestión. Si se trata de una clase de core (como admin o user) el nombre de la clase sería admin_external o user_external respectivamente, y si es un módulo (como el foro) entonces seria mod_forum_external. Básicamente el nombre depende del Path: por ejemplo, como el external.php del foro se encuentra en /mod/forum, la clase debe llamarse mod_forum_external. Si cambiáramos el nombre de la carpeta, habría que adaptar el nombre de la clase.

      Todo esto es por temas de implementación interna. Recordemos que habíamos dicho anteriormente que la capa de protocolo es la que se encarga de localizar y delegar la petición al external.php correspondiente. Pues la localización del módulo se realiza mediante esta convención de nombres.

    • En la constructora de la clase se definen las operaciones que se deben llamar en una array "descriptions". Por cada operación se definen cuales son los parámetros de entra y de retorno.
    • Las operaciones que se definen en la clase serán todas estáticas, y comprobarán la autorización del usuario, adaptarán los parámetros y llamarán a la función correspondiente de core.
  • api.php:
    • Todas las funciones serán estaticas.
    • El nombre de la clase seguirá la misma convención de nombres que en el caso de la external, pero finalizado en "_api".

En esta página podréis ver código de ejemplo del protocolo REST y del external.php: http://docs.moodle.org/en/Development:Web_services

Enlaces relacionados:

  • Web Services, Moodle API y Listado de funciones
  • Discusión sobre Web Services de Moodle 2.0
  • Blog de los desarrolladores
  • CVS de Moodle
Read More 4 comments | Posted by Davigetto | edit post
Newer Posts Older Posts Home

The FIBer Talks

  • About
      I'm using this blog as logbook for my PFC
  • facebook

    Facebook

    Who is Davigetto?

    My photo
    Davigetto
    View my complete profile

    Blog Archive

    • ▼  2009 (7)
      • ▼  May (1)
        • Nos trasladamos a un Wordpress!
      • ►  March (3)
        • Reunión 09/03
        • Reunión 03/03
        • Testing de los protocolos WS contra el foro - 02/03
      • ►  February (2)
        • Cambios en la arquitectura del Web Service - 26/02
        • Python y PHPUnit Testing - 17/02
      • ►  January (1)
        • Interoperabilidad en Moodle 2.0 (15/01 - 27/01)
    • ►  2008 (37)
      • ►  December (1)
      • ►  October (6)
      • ►  September (7)
      • ►  August (2)
      • ►  July (7)
      • ►  June (7)
      • ►  May (4)
      • ►  February (3)
    • ►  2007 (12)
      • ►  December (1)
      • ►  September (1)
      • ►  August (2)
      • ►  July (2)
      • ►  June (3)
      • ►  March (3)

    Labels

    • Computer (8)
    • database (1)
    • Diary Life (1)
    • General (6)
    • Information Systems (1)
    • Me quejo (2)
    • Miscelanea (1)
    • moodle (4)
    • opensyllabus (1)
    • Personal (7)
    • PFC (26)
    • php (2)
    • Poetry (6)
    • restore (1)
    • Testing (1)
    • Web (1)
    • xml (1)
    • xslt (2)
    • zip (1)

    Last Comments

    Loading...




    • Home
    • Posts RSS
    • Comments RSS
    • PFC

    © Copyright El FIBer Habla. All rights reserved.

    Back to Top