Feature Wiki

Information about planned and released features

Tabs

xAPI: LRS proxy

1 Initial Problem

xAPI spec is not created to be used exclusively in LMS but to be based on a database called Learning Record Store (LRS). How to design the infrastructure with LRS and LMS is not exactly part of the spec, although some possibilities are offered.

One of the obvious designs would be to build the LRS as a part of the LMS. Beyond the questions of resources and maintenance (LRS is not designed to be a small, simple feature, quite the opposite!) the technical requirements to an efficient LRS are quite different, for example in terms of database architecture. Based on the design of data (json statements) an LRS would best be used with a NoSQL database, such as Mongo or Redis.

On the other hand there are already some quite powerful open source LRS, that have already proven themselves and are ready to be used.

There are some different approaches, on how to use a 3rd party LRS with ILIAS. After all in ILIAS we want and we need the final data on the learning progress.

2 Conceptual Summary

So the idea called 'LRS proxy' would be not just to ask LRS for the data afterwards (whenever), but be basic control of the communication of the content to the LRS. ILIAS will be receiving and forwarding the data TO the LRS and the responses FROM the LRS and thus be just in time fully aware of the state of the learning experience and potentially be in basic control on the data, if needed in further implementations.

Note:

Question: Does the proxy do anything for anonymisation and privacy?
Answer: In a first stage of development: If an anonymization is desired, a pseudonymization already occurs at the content call. The proxy forwards the pseudonymized requests, but can itself resolve the pseudonymization and permanently store certain learning progress features in ILIAS. The LRS (client) can also be deleted without affecting learning progress storage in ILIAS. Due to the possible deletion of the LRS (client) including the usually many data per user, the proxy contributes to data minimization as an element of data protection.
In further expansion stages, the proxy itself should be able to suppress statements (xAPI: Statement Reducer), so that less data arrives in the LRS. Also, the possibility should be examined to change statements specifically (eg for pseudonymization Pseudonymization of statements with xAPI LRS Proxy). However, this requires further development steps and, in particular, effects on the performance must be examined. If necessary, the session handling should also be adjusted.

Question: Is reporting from the data of the LRS / s necessary or is the data in ILIAS sufficient?
Answer: That depends on the desired depth of detail of the reporting. At the level of basic reporting on learning status (completed, failed ...), ILIAS is sufficient. Further information requires data from the LRS. For cross-object detail analyzes, the same LRS type should be used. Alternatively, statement forwarding can be used under certain circumstances.

3 User Interface Modifications

3.1 List of Affected Views

Views are now not changed because LRS Proxy is the default option. Changes are necessary when xAPI: Detecting Learning Progress by checking LRS is develloped.

3.2 User Interface Details

Actually special user inferaces for this feature are not planned.

3.3 New User Interface Concepts

No new interface concepts.

4 Technical Information

The actual lrs proxy uses this extra composer libraries:

  • "php-di/php-di": "^5.4",
  • "guzzlehttp/guzzle": "^6.2",
  • "zendframework/zend-diactoros": "^1.3",
  • "mtdowling/jmespath.php": "^2.3"
The core dependency is a psr7 compatible guzzle httpclient which already exists in the ILIAS composer libs and wrapped by ILIAS\\HTTP\\Request\\RequestFactory and ILIAS\\HTTP\\Response\\ResponseFactory. So it is possible to reduce the extra libraries to the guzzlehttp/guzzle 6.3 and zendframework/zend-httphandlerrunner.
No other technical implications are expected.

Updated information to required external libraries:

  • php-di/php-di
  • mtdowling/jmespath.php
NOT required in a core LRS proxy component anymore.

Used Libraries
  • guzzlehttp/guzzle:Why?The LRS proxy needs to grab and process the (mostly async xhr) requests from the xapi content module. It creates and sends a request copy to the LRS as a http client, recieves the repsonse and send a copy of the response back to the content.After my first short view maybe some of the request /response creation can be done with the already builtin guzzlehttp/psr7 and wrapped psr7 classes (ILIAS\\HTTP\\Request\\RequestFactory and ILIAS\\HTTP\\Response\\ResponseFactory). But we need also the guzzlehttp/guzzle Client library for sending and processing requests and responses with our custom middleware proxy classes.The guzzle ibrary is one of the most popular php httpclient library with over 124 million installations (see packagist.org).The code base is actively maintained via github.
After the discussion the PR was closed and the statement was clear: "Suggest zendframework/zend-httphandlerrunner to emit PSR-7 responses“ (https://github.com/guzzle/psr7/pull/245)

4.1 Integration

Most of the used libraries functionalities will be wrapped with an own implementation that can be used by developers. This way won't rely on the libraries and are able to replace them easily, when the support for any library should stop in the future.

4.2 Quality Control

The maintainers provide controlled testing environments for quality assurance.

5 Contact

6 Funding

If you are interest in funding this feature, please add your name and institution to this list.

7 Discussion

JourFixe, ILIAS [jourfixe], 15 JUL 2019 : This feature request asks to add some libraries to the core of ILIAS. Please provide some more information about the need of these libraries and if they probably could be substituted by existing ones or by own-written ones. We will have a workshop about this topic next Monday, 22 JUL 2019, 16:00 - 18:00 in Skype.

JourFixe, ILIAS [jourfixe], 29 JUL 2019 : We highly appreciate this suggestion and schedule the feature for 6.0.

8 Implementation

{The maintainer has to give a description of the final implementation and add screenshots if possible.}

Test Cases

Test cases completed on 2019-12-08 by Kohnle, Uwe [ukohnle]

  • 32082: Start einer Ressource mit xAPI-Proxy
  • 32083: Erneuter Start einer Ressource mit xAPI-Proxy

Approval

Approved at 26 Nov 2019 by Bakker, Onno [onnobakker].

Last edited: 9. Dec 2019, 00:00, Kohnle, Uwe [ukohnle]