API-Spezifikation des B2B HUB

API-Spezifikation des B2B HUB

Funktionsweise B2B Hub

Die B2B Hub (Message Exchange Service) Integration von einer Anwendung des Geschäftspartners (GP-Anwendung) und einer BAZG Fachanwendung (FA) ist Asynchron (siehe Abbildung unten). Das B2B Hub API bestätigt synchron den empfang einer Meldung mit dem HTTP 201 Status-Code. Alle Meldungen, welche eine GP-Anwendung übermittelt, landen in einer Input Queue. Die GP-Anwendung kann Meldungen in diese Queue schreiben, die übermittelten Meldungen aber nicht via dem API lesen.

We've encountered an issue exporting this macro. Please try exporting again later.

Der B2B Hub notifiziert via asynchroner Message, dass eine neue Meldung für eine FA empfangen wurde. Die entsprechende FA liest anschliessend die Meldung, verarbeitet diese und sendet eine Antwortmeldung an den B2B Hub auf die Output Queue. Die GP-Anwendung kann die Output Queue mit verschiedenen Operationen abfragen und Meldungen lesen. Eine Meldung kann mehrfach gelesen werden und wird erst nach einer Retention-Time von 14 Tagen aus der Output Queue gelöscht.

Die Meldungen und das Format von Meldungen, welche via dem B2B Hub ausgetauscht werden, wird jeweils von der entsprechenden FA definiert. Die Meldungen werden ohne Veränderung übertragen. Der B2B Hub tauscht ausschliesslich Meldungen zwischen einer FA und einer GP-Anwendung aus. Die B2B Hub API Versionen können von FA zu FA unterschiedlich sein. Eine FA bestimmt die Versionen der API, welche sie zu einem bestimmten Zeitpunkt unterstützt.

Anwendung Geschäftspartner

Die Anwendung des Geschäftspartners (GP)

  • Als Provider erstellt die Anwendung mit API PUT /messages/{ID} neue Meldungen mit einer eindeutigen ID (z.B. NT015) für eine BAZG Fachanwendung in die Input Queue A.

  • Als Consumer fragt man mit API GET /messages ab, welche Meldungen (Liste von ID’s, messageType,..) in der Output Queue B vorhanden sind und liest mit API GET /message/{ID2} die Meldungen, welche von einer BAZG Fachanwendung erstellt wurden und verarbeitet diesen entsprechend den funktionalen Regeln der Anwendung.

B2B Hub Fachanwendung

Der B2B Hub bietet einen asynchronen Meldungsaustausch zwischen zwei Systemen, zum Beispiel GP-Anwendung und Passar.
Ein B2B Hub ist immer mit einer bestimmten BAZG Fachapplikation verbunden (beispielsweise Passar, Chartera Output oder LSVAIII). Er besteht aus zwei Meldungsqueues:

  • Input Queue A: Eingehende Meldungen vom GP, welche von der BAZG Fachapplikation asynchron konsumiert werden.

  • Output Queue B: Ausgehende Meldungen vom BAZG an das Geschäftspartner, welche periodisch von der GP-Anwendung gelesen und verarbeitet werden.

BAZG Fachanwendung

Die BAZG Fachanwendung wird mittels einem Event über eingehende Meldungen des GP informiert. Diese werden nach dem Eintreffen des Events von Queue A gelesen und entsprechend der Fachapplikationslogik verarbeitet. Anschliessend wird eine Antwortmeldung auf Queue B publiziert.

Generische API des B2B Hub

Der B2B Hub ist ein Standardservice für die sichere, asynchrone Kommunikation zwischen Fachanwendungen der Bundesverwaltung und externen Partnersystemen.
Der Service wird dabei pro Fachanwendung oder Domäne instanziiert.

Die API für den B2B Hub ist generisch gehalten, kann aber Domänen-spezifisch verwendet werden.

API Funktionen

Hinweis: Die Pfade werden jeweils mit den entsprechenden Versionen versehen.
Beispiel: /messages entspricht bei der API-Version 3 dem Pfad /v3/messages

Queue

 

Methode

Pfad

Verwendung

Queue

 

Methode

Pfad

Verwendung

Output

Abfrage Messages

GET

/messages

Gibt eine Liste von Meldungen in Form von messageIds für den authentisierten GP aus.
Filterung der Suche und Iteration über mehrere Meldungen ist je nach API Version möglich.

Lesen einer Message

GET

/messages/{messageId}

Gibt genau eine Meldung für den authentisierten Geschäftspartner und Meldungsidentifkation messageId zurück.

Lesen nächster Message mit einem Offset

GET

/messages/{messageId}/next

Gibt eine Meldung der Output Queue für den authentisierten GP (und optional topicName) zurück, welche chronologisch nach der Meldung mit der mitgegebenen messageId publiziert worden ist.
Dient der Iteration über Meldungen in chronologischer Reihenfolge. Diese Operation unterstützt nur sequenzielles Lesen von einzelnen Meldungen.

Input

Übermitteln einer Meldung

PUT

/messages/{messageId}

Dient dem Übermitteln einer neuen Meldung in die Input Queue.

API Versionen

Die API Versionen sind standardmässig im OpenAPI Specification Format dokumentiert. Details finden Sie auf den folgenden Seiten:

Verwendung von B2B Hubs im neuen Warenverkehrssystem

Im Umfeld des neuen Warenverkehrssystems des BAZG können diverse Fachanwendungen über einen jeweils dedizierten B2B Hub angebunden werden.
Zur Verfügung stehen im Kontext Passar aktuell:

Fachanwendung / Domäne

Verwendung

Fachanwendung / Domäne

Verwendung

B2B HUB für Passar

Meldungsaustausche zwischen Passar und nationalen Partnersysteme 

B2B HUB für Chartera Output

Bezug von Dokumenten durch die Partnersysteme

Die folgenden Parameter werden domänenspezifisch verwendet. Details zu diesen Parametern sind jeweils in den Artikeln der oben erwähnten Fachanwendungen und Domänen beschrieben.

Domäne spez. Parameter

Verwendung

Domäne spez. Parameter

Verwendung

http Header message-type

Der messageType dient der eindeutigen Zuordnung einer gesendeten Meldung. Jede BAZG Anwendung (FA) hat unterschiedliche Meldungen definiert.

http Header partner-topic

http Header partner-external-reference

Diese Attribute können beim PUT gesetzt werden.
Sie dienen, um zwischen Meldungen des GP zu unterscheiden, welche mehrere (externe?) Systeme für die gleiche Fachanwendung verwenden.

http Header message-id

Bei GET /messages/{id}/next wird in der Antwortmeldung (HTTP Response) die message-id im HTTP Header der gelesenen Meldung übermittelt.

Query partnerTopic

Dieser Parameter wird in der Antwortmeldung vom Fachsystem geschrieben.

Query topicName

Dieser Parameter kann domänenspezifische (zum Beispiel import oder export) für die Zuweisung zu einem fachlichen Kontext verwendet werden.

query groupId

Die groupId gruppiert mehrere unterschiedliche Meldungen, welche fachlich/inhaltlich zusammengehören.

Ablauf

Die unteren Sequenz Diagramm beschreibt beispielhaft den Meldungsaustausch einer Applikation des Geschäftspartners (Anwendung Geschäftspartner) via B2BHub mit einer BAZG Fachapplikation (BAZG_FA).

Übermittlung von Meldungen an BAZG

Mit dem HTTP Return Code 201 erhält die Applikation des GPs synchron die Bestätigung, dass die Meldung in der BAZG_FA angekommen und gespeichert wurde. Diese Meldung wird von der BAZG_FA automatisch verarbeitet.

Lesen von BAZG Meldungen

Die BAZG_FA sendet im Regelfall zu jeder eingehenden Meldung asynchron mindestens eine Antwortmeldung. Je nach Prozess können auch mehrere Meldungen ausgelöst werden.

HTTP Return Codes

Die Services vom BAZG sind redundant verfügbar, dennoch können verschiedene Fehler während des Betriebs auftreten. Die Softwarelösung des Geschäftspartners muss robust mit unterschiedlichen Fehlersituationen umgehen können - beispielsweise Meldungen zu einem späteren Zeitpunkt erneut senden.

Return Code

Ursache

Massnahmen

Return Code

Ursache

Massnahmen

400 Bad Request

Der Aufruf ist fehlerhaft. Beispiele:

  • erforderliche Parameter fehlen

  • Parameter sind im falschen Format 

  • Body in PUT ist kein gültiges XML

  • <?xml version="1.0" encoding="utf-8"?> fehlt

  • Konfiguration überprüfen

401 Unauthorized

  • Im Request Header fehlt Authorization-Header mit dem JWT

  • Bearer Token ist abgelaufen

  • Refresh Tokens

  • Falls Refresh Token abgelaufen ist neue Tokens via e-Portal generieren und in der Applikation übernehmen

403 Forbidden

  • Keine Berechtigung für diesen Geschäftspartner (bpId)

  • Fehlende Berechtigung für den B2B Hub der entsprechenden BAZG Fachanwendung

  • Konfiguration überprüfen

  • Richtige Token für richtige Umgebung

  • Berechtigungen via ePortal beantragen

404 Not Found

  • URL ist fehlerhaft

  • No next Message found

Konfiguration überprüfen

415 Unsupported Media Type

Content-Type ist nicht application/xml (case-insensitive)

Header korrekt setzen

408 Request Timeout

B2B Hub hat nicht in der gewünschten Zeit geantwortet.

Request später nochmals senden.

500 Internal Server Error

B2B Hub hat ein internen Fehler

Request später nochmals senden.

Temporäres Fehler-Handling

Die folgenden Fehler sind temporär und können mit einem Retry wiederholt gesendet werden:

  • 408 Request Timeout

  • 500 Internal Server Error

Da temporäre Fehler vielfach mit überlasteten Systemen in Zusammenhang stehen, ist es sinnvoll eine exponentielle Backoff-Strategie mit Circuit Breaker einzusetzen.

Generische Parameter

Die folgenden Parameter werden bei allen Instanzen vom B2B Hub gleichermassen verwendet.

Parameter

Beschreibung / Verwendung

Parameter

Beschreibung / Verwendung

Path messageId

http Header message-id

Eindeutige Identifikation einer Meldung, die übermittelt wird. Diese Identifikation wird vom Sender der Meldung gesetzt und muss als eine UUID Version 4 übermittelt werden.

Die messageId hat keine Beziehung zur messageIdentification innerhalb einer Meldung wie der NT015 - Warenanmeldung Durchfuhr (initial). Sie wird nur innerhalb vom B2B Hub der Fachanwendung verwendet.

http Header bp-id

Eindeutige, 10-stellige ID zur Identifikation des Geschäftspartners. Sie wird beim Onboarding eines Geschäftspartners der BAZG vergeben.

Query lastMessageId

Eindeutige Identifikation der letzten Meldung. Dieser Query Parameter wird verwendet, um die nächsten Meldungen nach einer vorherigen Abfrage zu suchen. Kann ähnlich wie ein Pointer/Offset angesehen werden. 

Query size

Anzahl der Meldungen, welche zurückgegeben werden (standardmässig 1000)

  • Minium: 1

  • Maximum: 1000

Autorisierung

Um eine B2B Hub API Version einer FA zu verwenden muss diese vorgängig über das API Selfservice Portal für einen Geschäftspartner abonniert werden.

TODO Rollen verlinken, GP-Anwendung

Die Autorisierung ist mittels Bearer Token gemäss HTTP-Standard implementiert. Die Autorisierungsinformationen werden im HTTP Header übermittelt.

Syntax: Authorization: <auth-scheme> <authorization-parameters>

Beispiel: Authorization: Bearer eyJ0e...

Das Access Token (authorization-parameters) kann mit dem Support-Prozess SP4: "Access Token refreshen" erneuert werden.

Idempotenz B2B Hub

Die messageId auf dem PUT /messages Request ist die Idempotenz ID für den B2B Hub. Jede Meldung mit der gleichen ID wird auch als die gleiche Anfrage angesehen. Wenn eine messageId mehrfach übermittelt wird, diese aber schon verarbeitet wurde, gibt es keine Prozessierung des Payloads der Meldung (beispielsweise NT015 - Warenanmeldung Durchfuhr (initial)).

Der Payload der Meldungen hat für die Fachanwendung auch immer eine eindeutige ID, wie beispielsweise messageIdentification bei Passar oder die ProcessId bei Chartera Output.
Die folgende Tabelle zeigt verschiede Beispiele von den Identifiern. Dort ist beschrieben wie der B2B Hub und die Fachanwendung (Passar) reagieren.

 

messageId

messageIdentfication

Bermerkung

 

messageId

messageIdentfication

Bermerkung

Initial

979dc4db-…-3c5426a1cfe1

6eb03ffb-…-f1edfdebfaa5

  • Initiale Übermittlung 201 Created vom B2B Hub erhalten

  • Passar antwortet auf diese Meldung (IN NT015 OUT NC909/NT028)

Resend

979dc4db-…-3c5426a1cfe1

6eb03ffb-…-f1edfdebfaa5

  • Response 201 Created vom B2B Hub erhalten.

  • Keine neue Übermittlung an Passar.

Resend mit anderer Payload ID

979dc4db-…-3c5426a1cfe1

2ac54a8f-…-ab4ef6565f0a

  • Response 201 Created vom B2B Hub.

  • Keine neue Übermittlung an Passar.

Neue messageId, alter Payload

44b7cb0a-…-7673882bf6df

6eb03ffb-…-f1edfdebfaa5

  • Response 201 Created vom B2B Hub

  • Neue Meldung aus Sicht B2B Hub

  • Passar antwortet mit einer NC909 dass die messageIdentification schon für eine andere Meldung verwendet worden ist.

 

 

 


Q&A