1
0
mirror of https://github.com/pcvolkmer/mv64e-rest-to-kafka-gateway synced 2025-09-13 09:12:51 +00:00
Paul-Christian Volkmer 6527870941 test: ensure authorization check is done first
This will ensure authorization check will be done before any
other checks.
2025-07-15 21:40:34 +02:00
2025-07-11 23:21:51 +02:00
2025-07-11 23:21:51 +02:00
2025-07-11 23:21:51 +02:00
2025-07-11 23:21:51 +02:00
2025-07-11 23:21:51 +02:00
2025-07-11 23:21:51 +02:00
2025-07-14 18:34:10 +02:00

DNPM Kafka Rest Proxy

DNPM Datenmodell 2.1 REST Proxy für Kafka

Einordnung innerhalb einer DNPM-ETL-Strecke

Diese Anwendung erlaubt das Weiterleiten von REST Anfragen mit einem Request-Body und Inhalt im DNPM-Datenmodell 2.1 sowie Content-Type von application/json bzw application/vnd.dnpm.v2.mtb+json an einen Apache Kafka Cluster.

Verwendung im Zusammenspiel mit https://github.com/pcvolkmer/etl-processor

Konfiguration

Beim Start der Anwendung können Parameter angegeben werden.

Usage: dnpm-kafka-rest-proxy [OPTIONS] --token <TOKEN>

Options:
      --bootstrap-server <BOOTSTRAP_SERVER>
          Kafka Bootstrap-Server(s) [env: KAFKA_BOOTSTRAP_SERVERS=] [default: kafka:9094]
      --topic <TOPIC>
          Kafka Topic [env: APP_KAFKA_TOPIC=] [default: etl-processor_input]
      --token <TOKEN>
          bcrypt hashed Security Token [env: APP_SECURITY_TOKEN=]
      --listen <LISTEN>
          Address and port for HTTP requests [env: APP_LISTEN=] [default: [::]:3000]

Die Anwendung lässt sich auch mit Umgebungsvariablen konfigurieren.

  • APP_KAFKA_SERVERS: Zu verwendende Kafka-Bootstrap-Server als kommagetrennte Liste
  • APP_KAFKA_TOPIC: Zu verwendendes Topic zum Warten auf neue Anfragen. Standardwert: etl-processor_input
  • APP_SECURITY_TOKEN: Verpflichtende Angabe es Tokens als bcrypt-Hash
  • APP_LISTEN: Adresse und Port für eingehende HTTP-Requests. Standardwert: [::]:3000 - Port 3000 auf allen Adressen (IPv4 und IPv6)

Die Angabe eines Tokens ist verpflichtend und kann entweder über den Parameter --token erfolgen, oder über die Umgebungsvariable APP_SECURITY_TOKEN.

HTTP-Requests

Die folgenden Endpunkte sind verfügbar:

  • POST /mtb/etl/patient-record: Senden eines MTB-Files
  • DELETE /mtb/etl/patient-record/:patient_id: Löschen von Informationen zu dem Patienten

Übermittelte MTB-Files müssen erforderliche Bestandteile beinhalten, ansonsten wird die Anfrage zurückgewiesen.

Zum Löschen von Patienteninformationen wird intern ein MTB-File mit Consent-Status REJECTED erzeugt und weiter geleitet. Hier ist kein Request-Body erforderlich.

Bei Erfolg enthält die Antwort im HTTP-Header x-request-id die Anfrage-ID, die auch im ETL-Prozessor verwendet wird.

Authentifizierung

Requests müssen einen HTTP-Header authorization für HTTP-Basic enthalten. Hier ist es erforderlich, dass der Benutzername token gewählt wird.

Es ist hierzu erforderlich, die erforderliche Umgebungsvariable APP_SECURITY_TOKEN zu setzen. Dies kann z.B. mit htpasswd erzeugt werden:

htpasswd -Bn token

Der hintere Teil (hinter token:) entspricht dem bcrypt-Hash des Tokens.

Beispiele für HTTP-Requests und resultierende Kafka-Records

Beispiele für gültige HTTP-Requests zum Übermitteln und Löschen eines MTB-Files.

Übermittlung eines MTB-Files

Anfrage mit curl, hier mit beiliegendem Test-File:

curl -u token:very-secret \
  -H "Content-Type: application/json" \
  --data @test-files/mv64e-mtb-fake-patient.json \
  http://localhost:3000/mtb/etl/patient-record

Als Content-Type kann auch application/vnd.dnpm.v2.mtb+json verwendet werden.

Antwort:

HTTP/1.1 202 Accepted
x-request-id: 1804d5c1-af3d-4f75-81a0-d9ca7c9739ef
content-length: ...
date: Sat, 09 Mar 2024 11:16:44 GMT

Resultierender Kafka-Record:

  • Key: { "pid" : "P1" }
  • Headers:
    • requestId: 1804d5c1-af3d-4f75-81a0-d9ca7c9739ef
  • Value: { "patient": { "id": "fae56ea7-24a7-4556-82fb-2b5dde71bb4d", .... } }

Löschen von Patienten

Anfrage auch hier mit curl:

curl -u token:very-secret \
  -H "Content-Type: application/json" \
  -X DELETE \
  http://localhost:3000/mtb/etl/patient-record/P1

Antwort:

HTTP/1.1 202 Accepted
x-request-id: 8473fa67-8b18-4e8f-aa89-874f74fcc672
content-length: ...
date: Sat, 09 Mar 2024 11:24:35 GMT

Resultierender Kafka-Record:

  • Key: { "pid" : "P1" }
  • Headers:
    • requestId: 8473fa67-8b18-4e8f-aa89-874f74fcc672
  • Value: JSON-String mit Patienten-ID P1 und ohne weitere Angaben: { "patient": { "id": "P1", .... } }

Es werden keine weiteren patientenbezogenen Daten übermittelt.

In optionaler Verbindung mit Key-Based-Retention wird lediglich der letzte und aktuelle Record, hier die Information ohne Consent-Zustimmung, in Kafka vorgehalten.

Trifft dieser Kafka-Record im ETL-Prozessor ein, so wird dort ebenfalls eine Löschanfrage ausgelöst, da keine Modellvorhaben Metadaten enthalten sind.

Description
Diese Anwendung versendet MV64e HTTP requests mit DNPM V2.1 Payload an einen Kafka Broker
Readme 210 KiB
Languages
Rust 96.8%
Dockerfile 3.2%