Konzept HttpInvoker
Diese Seite ist ein Teil der IsyFact-Standards. Alle Inhalte der Seite, insbesondere Texte und Grafiken, sind urheberrechtlich geschützt. Alle urheberrechtlichen Nutzungs- und Verwertungsrechte liegen beim Bundesverwaltungsamt.
Die Nutzung ist unter den Lizenzbedingungen der Creative Commons Namensnennung 4.0 International gestattet.
1. Einleitung
Dieses Dokument ist aus mehreren Quellen entstanden und fasst die vorhandene Dokumentation zum Thema HTTP Invoker zusammen. Der Baustein HTTP Invoker steht unter Bestandsschutz und wird nicht mehr aktiv weiterentwickelt. Er wird in einem der nächsten Major Releases aus der IsyFact entfernt. |
Spring HTTP Invoker ist ein leichtgewichtiges Protokoll, das transparente Service-Aufrufe zwischen Java-Anwendungen ermöglicht. Es verwendet hauptsächlich die Standardmechanismen von Java zur Serialisierung und stellt Services über HTTP bereit.
Dieses Dokument konzentriert sich auf die konzeptionellen Aspekte der Verwendung von HTTP Invoker. Es sorgt dafür, dass Services in allen IT-Systemen gleichartig umgesetzt werden und grundlegende Anforderungen an die Erstellung und Nutzung von Services eingehalten werden.
Das Dokument richtet sich vor allem an Software-Architekten und beschreibt, wie ein IT-System mit einer Service-Schnittstelle basierend auf HTTP Invoker versehen wird, oder solche Schnittstellen aufruft. Dabei vertieft es die Grundlagen, die im Detailkonzept Komponente Service beschrieben werden und wendet sie auf das Service-Framework HTTP Invoker an.
Das Dokument erläutert im Kapitel Kommunikation mit HTTP Invoker zunächst die Grundlagen, Rahmenbedingungen und Beschränkungen des Einsatzes von HTTP Invoker. Danach beleuchtet das Kapitel Aufbau der Servicelogik, wie die Komponente Service architektonisch mit HTTP Invoker aufgebaut ist. Im Kapitel Auslieferung einer Service-Schnittstelle geht es darum, wie HTTP Invoker Schnittstellen ausgeliefert werden und was dabei zu beachten ist. Schließlich zeigt das Dokument noch Vorgaben zu den Themen Versionierung und Namenskonventionen auf.
2. Kommunikation mit HTTP Invoker
IT-Systeme können HTTP Invoker zur Kommunikation mit anderen IT-Systemen innerhalb der Systemlandschaft einsetzen. Das aufgerufene IT-System exportiert seine Service-Schnittstellen in Form von HTTP Invoker Schnittstellen und das aufrufende IT-System ruft diese direkt auf. Da HTTP Invoker auf serialisierten Java-Objekten basiert, können ausschließlich Java-basierte IT-Systeme miteinander kommunizieren. Die Kommunikation mit HTTP Invoker verläuft außerdem synchron. Asynchrone Kommunikation ist von HTTP Invoker nicht vorgesehen und wird im Weiteren auch nicht beschrieben.
Um eine möglichst lose Kopplung der IT-Systeme zu erreichen, werden folgende Festlegungen getroffen:
-
Es werden keine Komponenten des Anwendungskerns extern verfügbar gemacht: Es wird stets eine explizite Schnittstellen-Bean (Remote-Bean) als HTTP Invoker Schnittstelle implementiert.
-
Es werden keine Datenbank-Entitäten verfügbar gemacht: Jegliche über HTTP Invoker zu transportierende Objekte sind Transportobjekte.
-
Es werden keine Exceptions des Anwendungskerns geworfen: Stattdessen werden möglichst grobe Exceptions geworfen, welche nur von der Service-Schnittstelle verwendet werden.
IT-Systeme definieren für ihre HTTP Invoker Schnittstellen u. a. das Remote-Bean, alle direkt und indirekt verwendeten Transportobjekte sowie alle über die Schnittstelle transportierten Exceptions. Es stellt diesen Teil der HTTP Invoker Schnittstelle als Bibliothek anderen IT-Systemen zur Verfügung, sodass diese die Schnittstelle aufrufen können. Es ergibt sich so folgendes Szenario für einen Aufruf einer HTTP Invoker Schnittstelle (siehe Abbildung 1).
2.1. Kompatibilität zu OAuth 2
Um die Kompatibilität zu OAuth 2 (siehe Konzept Sicherheit) zu gewährleisten, wird das Bearer Token von allen HTTP Invoker Schnittstellen verarbeitet und weitergeleitet.
Das Bearer Token wird dabei im AufrufkontextVerwalter
abgelegt und ist so jeder Methode des Remote-Beans zugänglich (siehe Aufbau des Remote-Beans).
Die Weiterleitung des Bearer Tokens erfolgt über einen HTTP-Header und ist so für existierende Schnittstellen transparent.
3. Aufbau der Servicelogik
Der Baustein Http Invoker ergänzt die Servicelogik um ein Remote-Bean. Der Aufbau der Servicelogik ist in Abbildung 2 dargestellt.
Im Wesentlichen besteht die Servicelogik also aus drei Klassen, die im Folgenden näher beleuchtet werden.
3.1. Aufbau des Remote-Beans
Das Remote-Bean ist ein Interface, welches die Service-Operationen als Methoden definiert. Es definiert ebenfalls die für den Service-Aufruf und die Antwort nötigen Transportobjekte sowie fachliche Exceptions.
Das Remote-Bean wird als Java-Interface umgesetzt. Es definiert mittels der passenden Spring-Konfiguration im IT-System eine HTTP Invoker Schnittstelle.
Jeder Methode des Remote-Beans wird als erster Parameter das Transportobjekt des Aufrufkontextes übergeben. Der Aufrufkontext sorgt dafür, dass jeder Methode des Remote-Beans die Login-Daten (Benutzer, Behörde, …), die Rollen und die Korrelations-ID zur Verfügung stehen.
3.2. Aufbau der Exception-Fassade
Die Exception-Fassade ist verantwortlich für die Umwandlung der durch den Anwendungskern oder die Servicelogik geworfenen Exceptions in Exceptions der Service-Schnittstelle. Hierzu implementiert die Exception-Fassade das Remote-Bean-Interface der Service-Schnittstelle und agiert als Wrapper um die Service-Fassade. Es ist wichtig, an der Exception-Fassade den Logging-Kontext zu setzen, damit die Log-Einträge zu den Exceptions mit der korrekten Korrelations-ID versehen sind. Dazu stellt der Baustein entsprechende Annotationen bereit.
3.2.1. Entgegennahme der Korrelations-ID an einer Service-SST
Die Entgegennahme (und falls nötig, Neuerzeugung) und Registrierung der Korrelations-ID im MDC erfolgt an der Exception-Fassade der HTTP-Invoker-Schnittstelle über die Annotation @StelltLoggingKontextBereit
aus der Bibliothek isy-serviceapi-core
.
Die zur Verwendung der Annotation notwendige Konfiguration wird durch die Autokonfiguration von isy-serviceapi-core
durchgeführt.
3.3. Aufbau der Service-Fassade
Die Service-Fassade übernimmt die restlichen Aufgaben der Servicelogik. Sie transformiert die Transportobjekte der Service-Schnittstelle in Objekte des Anwendungskerns und umgekehrt, in der Regel mithilfe eines Bean Mappers. Sie führt außerdem die Autorisierung des Aufrufs aus. Hierzu verwendet sie den Baustein Sicherheit (siehe Konzept Sicherheit).
4. Auslieferung einer Service-Schnittstelle
Das Remote-Bean wird mit allen direkt oder indirekt verwendeten Transportobjekten in einer eigenständigen Bibliothek paketiert, damit IT-Systeme die Schnittstellendefinitionen direkt mit ihren Aufrufern austauschen können. Die Bibliothek enthält:
-
das Java-Interface der Schnittstelle (Remote-Bean),
-
Java-Klassen der Transportobjekte,
-
Java-Klassen der Transport-Exceptions.
Diese Klassen werden üblicherweise in einer Bibliothek pro Service bereitgestellt. Die Maven-Koordinaten der Bibliothek sehen wie folgt aus:
-
die Group-ID teilt sich die Schnittstelle mit der bereitstellenden Anwendung,
-
die Artefakt-ID wird nach der Namenskonvention Maven Artefakt-ID von Schnittstellen-Bibliotheken aufgebaut.
Artefakt-ID von Schnittstellen-Bibliotheken | |
---|---|
Schema |
|
Beispiele |
|
Die Bibliothek wird abweichend von anderen Software-Artefakten versioniert. Die ersten beiden Teile der Versionsnummer (Major und Minor Version) sind Teil der Artefakt-ID, um mehrere Versionen einer Schnittstelle gleichzeitig einbinden zu können. Der dritte Teil der Versionsnummer (Patch Version) bildet die Maven-Versionsnummer des Artefakts.
Durch diese enge Kopplung zwischen mehreren IT-Systemen spielt die Java-Version, mit der die Schnittstellen-Bibliotheken kompiliert wurden, eine zentrale Rolle. Sie darf nicht neuer sein als die Java-Version aller beteiligter IT-Systeme. Es wird daher empfohlen, Schnittstellen mit der ältesten Java-Version zu kompilieren und auszuliefern, die für IT-Systeme verwendet werden darf.
5. Versionierung
Eine HTTP Invoker Schnittstelle vereint mehrere Service-Methoden in einem Remote-Bean. Für die Versionierung bedeutet das, dass stets die komplette Remote-Bean-Schnittstelle versioniert wird und nicht die einzelnen Methoden der Remote-Bean-Schnittstelle.
6. Namenskonventionen
Die Service-URLs der HTTP Invoker Schnittstellen müssen einheitlich nach folgendem Schema aufgebaut sein.
Schnittstellen: URL | |
---|---|
Schema |
|
Beispiele |
|
Variable |
Mögliche Ausprägungen |
|
Der Hostname des Servers |
|
Der Name der Anwendung.
Siehe Kapitel Namen von Anwendungssystemen.
Wenn es sich um eine Querschnittsanwendung handelt, muss der Name mit dem Präfix |
|
Der Name des Services. |
|
Die Versionsnummer des Service, die zweielementig und aufsteigend vergeben wird. Hierbei wird sich am Schema Major- und Minor-Level orientiert. Beispiele:
|
Klassennamen Transportobjekte | |
---|---|
Schema |
|
Beispiele |
|