Konzept HttpInvoker

Deprecation

Dieser Baustein ist veraltet und wird in einem zukünftigen Release entfernt. Die Inhalte dieser Seite sollten zur Entwicklung neuer Anwendungen nicht mehr berücksichtigt werden. Stattdessen wird empfohlen, Konzept REST zu verwenden.

IFS-Logo 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.

Creative Commons Namensnennung 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).

KapsCallInvoke
Abbildung 1. Aufbau der Kommunikation über HTTP Invoker

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.

AufbauServLogik
Abbildung 2. Aufbau der Servicelogik mit HTTP Invoker

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:

Tabelle 1. Namenskonvention Maven Artefakt-ID von Schnittstellen-Bibliotheken
Artefakt-ID von Schnittstellen-Bibliotheken

Schema

<anwendung>-httpinvoker-sst-<service>-<version>

Beispiele

xyz-gk-httpinvoker-sst-auskunft-v29.1

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.

Tabelle 2. Schnittstellen: URL
Schnittstellen: URL

Schema

http(s)://<Hostname>/<Anwendungsname>/<Servicename>_v<Version>

Beispiele

http(s)://register-xyz.test.de/xyz-register/AuskunftBean_v4_1

http(s)://qs-xyz.test.de/isy-benutzerverzeichnis/AuskunftBean_v4_1

Variable

Mögliche Ausprägungen

<Hostname>

Der Hostname des Servers

<Anwendungsname>

Der Name der Anwendung. Siehe Kapitel Namen von Anwendungssystemen. Wenn es sich um eine Querschnittsanwendung handelt, muss der Name mit dem Präfix isy- beginnen.

<Servicename>

Der Name des Services.

<Version>

Die Versionsnummer des Service, die zweielementig und aufsteigend vergeben wird. Hierbei wird sich am Schema Major- und Minor-Level orientiert. Beispiele:

  • 1_0

  • 12_7

Tabelle 3. Klassennamen Transportobjekte
Klassennamen Transportobjekte

Schema

<Entitaetsname>To

Beispiele

AkteTo

InformationenXyzTo