Apr 27

One of our active projects is to backport Moodle 2.0 webservices to Moodle 1.9.

Because of all the differences between Moodle 2.0 and Moodle 1.9 we will have to put into practice some tricks. The following image is a diagram of the designed achitecture:

Moodle 1.9 Web Services architecture

We have added to Moodle 2.0 webservices architecture a couple of components to solve some problems.

Core Layer

Core Layer has nearly the same elements that Moodle 2.0 core layer, but these elements had not been evolved. There are methods that print success messages to the screen, database libraries print error messages too, etc. This is a big problem! We don’t want to re-program all these functions, it would be a waste of time.

External Layer

We will copy external layer from Moodle 2.0 to Moodle 1.9. We want to make easier the upgrade from Moodle 1.9 to Moodle 2.0, we have to publish the same functions with the same parameters. We will have to tune their implementation a little, some published functions only exist on Moodle 2.0 or have changed a little from the previous version.

Local External REST Server is a new component that will provide a REST webservice throught localhost. It will call external functions, serialize results and return them.

Connectors Layer

We will copy all connectors from Moodle 2.0 to Moodle 1.9 and develop a proxy to the local REST server. The External Proxy will define the same functions that Moodle 2.0 Connectors are calling to the External layer. The main idea is to change all requires/includes in connectors to invoke proxy’s methods. The proxy will call external functions via local webservice and return the result.

Why are we doing this odd and tricky things?

If Moodle 1.9 core prints something to the screen, it will break all webservices response. Using this architecture, the only message that will be broken will be the response of local webservice call. If the Proxy detects an error in the local call (it can unserialize the response), it would know how to proceed in every situation.

Related Posts

Apr 27

Moodle.com is betting seriously on adapt Moodle to provide services to external applications.

The main objective is to publish all interesting core functions as web services, therefore, other applications will be able to retrieve calendar events, Virtual Campus management applications will be build easily, etc.

During last year, I’ve been working with Ludo and other students to design and develop a prototype of these webservices. During last MoodleMoot at Barcelona, Martin validated the idea and, after some modifications, we started the development. I’m developing some components and coordinating a development team here in Barcelona, Jérôme Mouneyrac is coordinating the whole project from Australia, Petr Skoda is working on security issues, and other many people is contributing to this project.

Moodle 2.0 Web Services architecture

The image over these words is a diagram about the decided architecture.

We have designed a 3 layers architecture: Connectors layer, External layer and Core layer. I’m going to explain them a little right now:

Core Layer

Core layer consist of all the Moodle core libraries that contain interesting functions to publish: functions about users, courses, groups, calendar, etc.

This layer is being improved in Moodle 2.0 because many of these interesting functions were printing messages to the screen. Moodle had not an API, it had several useful functions that had been developed during last last years. Because of the need of the webservices we are doing a refactor of all these core libraries and it starts to look like an API. Moodle core does not print messages, it throws exceptions for errors and does not have void methods.

External Layer

External layer consist of several new files called external.php, placed all over Moodle directories. external.php files contain wrappers to the layer below.

These wrappers are responsible for checking capabilities and parameters, and call the correct core function(s).

Connectors Layer

Connectors Layer is consist of several connectors. This layer will have a REST connector, a SOAP connector, a XML-RPC connector and a AMF connector. This layer admits plugins so many connector could be build easy to intergrate other systems with Moodle using other protocols.

This layer will be only responsible of accepting http connections, creating sessions and act as a bridge with the external layer.

This post is only an overview of the whole architecture, I hope I’ll have some time to make a couple of posts about external and connector layers, the ones that will be new at Moodle 2.0 and the most interesting layers of webservices.

Interesting Links:

Related Posts

Apr 22

Another video about wikis…. Ward Cunningham, wiki inventor, interviewed by John Gage, Ex-Vice President of the Science Office for Sun Microsystems.

This is not only a wiki talk, they speak about creativity, design, opensource and even SmallTalk programming :)

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Related Posts

Apr 22

This is an old but interesting TechTalk about MediaWiki and Wikipedia by Brion Vibber, Wikimedia Foundation’s CTO and lead developer at MediaWiki .

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Related Posts

Apr 07

An experiment in organic software visualization.

Code Swarm

 

“I’ve been studying software projects for a while now. Not the programming, but the people — the way they interact with each other through collaboration and communication. My investigations have always been visual: I’ve built applications that create pictures of what is happening within software projects. But they have always had a rigid structure to them. Organic information visualization, coined by Ben Fry, is a different approach to information visualization. It eschews traditional data confinement in space and lets the elements play together in freeform and unpredictable ways.”

This guy is creating short videos using SCM Systems logs. I don’t know if it is useful but the results are spectacular!

Here you can see the whole Eclipse history

 (Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Don’t forget to go to code_swarm project homepage to get more information, watch more videos or download the source code to try it out with your own projects. :)

Related Posts