Skip to content

RFC|Feature // Web-API // Ein Modul muss mehrerer Web-APIs ansprechen können

Im Ticket #463(RFC|Feature // Login|Authentifizierung) wird das Login-Verfahren für die App beschrieben und implementiert. Dabei wird die Anforderung gestellt, dass die App ihre Daten direkt von den Servicen abholt. Dafür muss die App die verschiedenen APIs der Service verstehen und ansprechen können. Zusätzlich muss es möglich sein den Access-Token oder den ID-Token zu übermitteln.

Konzept

Konzept-Multi-APIs.svg

Damit die App selbständig unterschiedliche Server/Service ansprechen kann, sollte für jeden Service ein Provider in der App hinterlegt werden. Ein Provider ist eine Bibliothek, welche weiß wie man mit dem einzelnen Service Kommuniziert und die Daten des Service in ein einheitliches App-Format übersetzt. Die Module können auf den Provider zugreifen, um benötigte Daten zu erhalten.

conzept-multi-apis_moodle_active.svg

In diesem Beispiel ist im Noten-Modul konfiguriert, dass die Noten-Daten über einen Moodle-Server abgeholt werden sollen. Somit wird der Moodle-Provider aktiviert und dieser für die Kommunikation mit dem Moodle-Server verwendet. Dabei stellen alle Provider die selbe Schnittelle für das Noten-Modul bereit.

Implementieren mit React-Kontexte

Auswirkungen

Somit wir der ASiST-Server nicht mehr benötigt, wodurch eine zu wartende Komponente im Server- bzw Kommunikationsdesign entfällt. Es werden alle Entwicklungen am ASiST-Sever eingestellt, um dieses Konzept stetig umzusetzen.

ALT

Mit dem Login muss die App ihre Daten direkt vom Service abholen, dazu muss ein Modul mehrerer Service(Web-APIs) unterstützen. Z.B.: Muss die App die Notendaten direkt vom HIS abholen können, da der Nutzer dort eingeloggt ist. Über den Kollektor werden die Daten nur im Notfall geleitet.

Wie kann man das Aufbauen?

Ein kleiner Prototyp ist im Event-Modul zu finden.

classDiagram
    Client <|-- RestClient
    Client <|-- GraphQLClient
    APIContext o-- Client: Erzeugt und enthält
    NewsContextProvider ..> View: Ummantelt
    NewsContextProvider ..|> APIContext: erzeugt

    class NewsView {
        
    }

    class NewsContext {
      client: Client
    }

    class NewsContextProvider {
      
    }

    class Client {
      +getNews()
    }

    class RestClient {
      +getNews()
    }

    class GraphQLClient {
      +getNews()
    }
Edited by Toni Beier
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information