Feature Wiki
Tabs
xAPI: LRS proxy
Page Overview
[Hide]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:
- User-Data depend on settings for Data Protection (see: xAPI Standard Object).
- Proxy also relevant for xAPI: Statement Reducer.
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"
No other technical implications are expected.
Updated information to required external libraries:
- php-di/php-di
- mtdowling/jmespath.php
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.
- zendframework/zend-httphandlerrunnerWhy?The proxy „server part“ of emitting a new response from consuming PSR7 compliant streams back to the content is not included in the guzzle libs. Last year there was a discussion in the guzzle developer community to implement this into the ecosystem:
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
- Author of the Request: Kohnle, Uwe [ukohnle], Schneider, Stefan [sschneider]
- Maintainer: Kohnle, Uwe [ukohnle]
- Implementation of the feature is done by: Kohnle, Uwe [ukohnle], Schneider, Stefan [sschneider]
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]
Approval
Approved at 26 Nov 2019 by Bakker, Onno [onnobakker].
Last edited: 9. Dec 2019, 00:00, Kohnle, Uwe [ukohnle]