# MV64e Kafka-to-REST Gateway Diese Anwendung nimmt Kafka Records entgegen und versendet MV64e HTTP requests mit DNPM V2.1 Payload an DNPM:DIP. ### Einordnung innerhalb einer DNPM-ETL-Strecke Diese Anwendung erlaubt das Weiterleiten von Kafka-Records mit DNPM-Datenmodell 2.1 an DNPM:DIP und ist somit das Gegenstück zu [mv64e-rest-to-kafka-gateway](https://github.com/pcvolkmer/mv64e-rest-to-kafka-gateway) Verwendung im Zusammenspiel mit https://github.com/pcvolkmer/mv64e-etl-processor ![Modell DNPM-ETL-Strecke](docs/etl.jpeg) ## Konfiguration Beim Start der Anwendung können Parameter angegeben werden. ``` Usage: mv64e-kafka-to-rest-gateway [OPTIONS] --dnpm-dip-uri Options: --bootstrap-servers Kafka Bootstrap Server [env: KAFKA_BOOTSTRAP_SERVERS=] [default: kafka:9094] --topic Kafka Topic [env: KAFKA_TOPIC=] [default: etl-processor_output] --response-topic Kafka Response Topic [env: KAFKA_RESPONSE_TOPIC=] [default: etl-processor_output_response] --group-id Kafka Group ID [env: KAFKA_GROUP_ID=] [default: mv64e-kafka-to-rest-gateway] --dnpm-dip-uri DNPM:DIP URI for API requests [env: DNPM_DIP_URI=] --dnpm-dip-username DNPM:DIP Username [env: DNPM_DIP_USERNAME=] --dnpm-dip-password DNPM:DIP Password [env: DNPM_DIP_PASSWORD=] --ssl-ca-file CA file for SSL connection to Kafka [env: KAFKA_SSL_CA_FILE=] --ssl-cert-file Certificate file for SSL connection to Kafka [env: KAFKA_SSL_CERT_FILE=] --ssl-key-file Key file for SSL connection to Kafka [env: KAFKA_SSL_KEY_FILE=] --ssl-key-password The SSL key password [env: KAFKA_SSL_KEY_PASSWORD=] ``` Die Anwendung lässt sich auch mit Umgebungsvariablen konfigurieren. * `KAFKA_BOOTSTRAP_SERVERS`: Zu verwendende Kafka-Bootstrap-Server als kommagetrennte Liste * `KAFKA_TOPIC`: Zu verwendendes Topic zum Warten auf neue Anfragen. Standardwert: `etl-processor_output` * `KAFKA_RESPONSE_TOPIC`: Zu verwendendes Topic zum Versenden von Antworten. Standardwert: `etl-processor_output_response` * `KAFKA_GROUP_ID`: Die Kafka Group ID. Standardwert: `mv64e-kafka-to-rest-gateway` * `DNPM_DIP_URI`: URI für DNPM:DIP API Requests (z.B. http://localhost/api) * `DNPM_DIP_USERNAME`: Benutzername für DNPM:DIP (wenn erforderlich) * `DNPM_DIP_PASSWORD`: Passwort für DNPM:DIP (wenn erforderlich) Optionale Umgebungsvariablen - wenn angegeben wird eine SSL-Verbindung zu Kafka aufgebaut. * `KAFKA_SSL_CA_FILE`: CA für SSL-Verbindungen * `KAFKA_SSL_CERT_FILE`: SSL Certificate Datei * `KAFKA_SSL_KEY_FILE`: SSL Key Datei * `KAFKA_SSL_KEY_PASSWORD`: SSL Key Passwort (wenn benötigt) ## Anforderungen an eingehende Kafka-Records Kafka-Records müssen eine(n) * **Key** im JSON-Format mit einem Wert für `patientID` haben. * **Header** mit Wert für`requestId` haben, damit eine ordnungsgemäße Zuordnung zu einer Anfrage im **mv64e-etl-processor** stattfinden kann. Ist dies nicht gegeben, kann die Rückantwort nicht einer eingehenden Anfrage zugeordnet werden. * **Payload** haben, die dem DNPM-Datenmodell 2.1 entspricht. Eine Prüfung auf MV- oder Forschungs-Consent findet nicht statt. ## HTTP-Requests zu DNPM:DIP Kann ein HTTP-Request nicht beantwortet werden, wird der zugehörige Kafka-Record nicht quittiert. Bei einem Neustart der Anwendung werden alle nicht quittierten Records erneut verarbeitet. Eine Antwort wird über das Kafka-Response-Topic nur dann übertragen, wenn von DNPM:DIP eine der folgenden HTTP-Status-Codes verwendet wurde: | Case | Status Code | |---------------------------------------|----------------------------------------------------| | Data OK | `200 OK` | | Data acceptable with quality issues | `201 Created` with JSON issue report | | Unacceptable Issues | `422 Unprocessable Content` with JSON issue report | | Fatal Issues Detected | `400 Bad Request` with JSON issue report | Siehe auch: https://github.com/dnpm-dip/api-gateway/tree/main/app/controllers#upload-a-patient-record Für alle anderen Status-Codes wird der eingehende Kafka-Record nicht quittiert und wird erneut bearbeitet werden.