The Basics: How RekallWeb Works

In some respects, the server end of RekallWeb is a reimplementation of Rekall as a set of python CGI scripts, or more truthfully, a reimplementation of the runtime version of Rekall. So, for instance, there are no design facilities. Plus, at the moment, only forms are implemented, no reports.

When a request arrives at RekallWeb to display a form, it effectively reads the form definition that Rekall itself uses. Actually, you have to get Rekall to export the form definition in a slightly modified version, but the differences are fairly small (though not neccessarily insignificant) and are described later. From the form definition, RekallWeb constructs an HTML web page; if you look at the HTML you might recognise the structure of the form. The HTML gets sent to the web browser in the usual way, and is supported by a bunch of JavaScript files. There is also some stuff going on between the scenes, depending on how RekallWeb is configured, but more of that below in the sections for geeks.

Suppose the page is a simple data entry form. The user enters some data, or makes some changes, and then clicks the Save button. The combination of the HTML and the JavaScript is such that all the data displayed in the form (and a bunch of other stuff) are sent back to the server, along with the reason why, in this case that the user clicked the Save button.

Back at the server, RekallWeb reloads the form into the state that existed when the page was created. Now, bear in mind that in Rekall, things like buttons actually do something by calling a python script. This is true even for things like a Save button (there are no "special" cases; work is always done via scripts). So, RekallWeb executes the script that would have been executed directly if the form was open in Rekall itself. Once the script has done its work, the results are sent back to the browser and the form gets updated.

From the point of view of the programmer implementing the form, there is no difference. The form contains data, and scripts execute when the user does something like click a button. The fact that control is moving back and forth between the browser and the server is significantly hidden.