Skip to content

Zugriff auf CuraGo-Daten inkl. Caching-Protokoll für Third-Party Apps


1. Allgemeines

In der folgenden Kurzanleitung wird grob skizziert, wie eine Third-Party-App mit dem CuraGo-Server kommunizieren sollte.

Für detailliertere Angaben ist die OpenAPI-Dokumentation heranzuziehen:

text
https://docs.curasoft.dev/cura-go.de

Da sehr große Datenmengen entstehen können, wird hier explizit auf die Kommunikation mit dem Server inklusive Caching-Protokoll eingegangen.


2. Authentifizierung

Die Authentifizierung besteht aus zwei Informationen:

  • API-Key: Erlaubt den Serverzugriff.
  • ACCESS-Key: Erlaubt den Datenzugriff.

Der API-Key wird von CuraSoft zur Verfügung gestellt.
Der ACCESS-Key wird vom Kunden / Pflegedienst / Leistungserbringer zur Verfügung gestellt.

Diese beiden Keys werden beim Authentifizieren im Header mitgeschickt.

Nachdem man sich erfolgreich authentifiziert hat, erhält man ein Bearer-Token, welches bei allen weiteren Requests im Auth-Header mitgeschickt werden muss.
Das Bearer-Token ist ein JWT (JSON Web Token).

Wichtig in diesem JWT ist der Claim adk (AppDataKey).
Das ist der Datenschlüssel zum Entschlüsseln sensibler Daten. Dieser AppDataKey ist zusätzlich mit dem ACCESS-Key verschlüsselt.

Request

Route

http
GET /auth/v3/app

Header

text
X-API-KEY: <api_key>
X-ACCESS-KEY: <access_key>

Response

text
<bearer>

3. Device registrieren

Damit der Server ein effizientes Daten-Caching betreiben kann, gibt es das sogenannte Device-Token.

Mit diesem Device-Token kann der Server eindeutig erkennen, welche Datensätze beim Client gelöscht, geändert oder neu angelegt werden müssen.

Das Device muss nur einmalig registriert werden.

Im Body wird ein JSON-Objekt mit Informationen über die Client-Anwendung mitgeschickt.

Request

Route

http
POST /api/v3/device/create

Header

text
Authorization: Bearer <bearer>

Body

json
{
  "caption": "Fancy 3rd Party App",
  "version": "1.0.0"
}

Response

text
<device_token>

4. Abfragen von Daten

Das Abfragen von Daten erfolgt immer in drei Schritten:

  1. Den Server nach Neuerungen fragen
    /api/v3/data/status
  2. Daten herunterladen
    /api/v3/rest/{model}
  3. Daten bestätigen
    /api/v3/rest/{model}/ack
    /api/v3/rest/{model}/cleanup

4.1 Den Server nach Neuerungen fragen

Das Device-Token vom Client und die jeweiligen Ressourcen, die abgefragt werden sollen, werden hier im JSON-Objekt mit übergeben.

Request

Route

http
POST /api/v3/data/status

Header

text
Authorization: Bearer <bearer>

Body

json
{
  "jobs": [
    {
      "token": "<device_token>",
      "models": [
        "Patient",
        "Mitarbeiter"
      ]
    }
  ]
}

Response

Body

json
[
  {
    "model": "Patient",
    "cleanup_ids": "1,4..10,12",
    "count_download": 4
  },
  {
    "model": "Mitarbeiter",
    "cleanup_ids": "",
    "count_download": 100
  }
]

Bedeutung der Response-Felder

FeldBeschreibung
cleanup_idsAlle IDs, die veraltet sind und beim Client gelöscht werden können. Aufeinanderfolgende IDs werden mit .. abgekürzt.
count_downloadAnzahl der Datensätze, die neu sind oder sich geändert haben.

4.2 Daten herunterladen

Beim Herunterladen der eigentlichen Daten ist es zwingend notwendig, dass alle IDs aus den Datensätzen, die vom Server ausgeliefert werden, lokal beim Client gespeichert werden.

Nur so kann eine fehlerfreie Kommunikation mit dem Server erreicht werden.

Request

Route

http
GET /api/v3/rest/{model}

Header

text
Authorization: Bearer <bearer>

Pfad-Parameter

text
{model}: z. B. Patient oder Mitarbeiter

Query-Parameter

text
token: <device_token>

Response

Body

json
[
  { "..": ".." },
  { "..": ".." }
]

Der Server liefert maximal 2000 Datensätze auf einmal aus.

Nachdem diese Datensätze bestätigt wurden, kann die nächste Abfrage erfolgen.
Das passiert so oft, bis der Server keine Datensätze mehr ausliefert.


4.3 Daten bestätigen

Nachdem Datensätze heruntergeladen und gespeichert wurden, muss dies beim Server bestätigt werden.
Dadurch wird der Datensatz bis zur nächsten Änderung nicht erneut ausgeliefert.

Hier gibt es zwei Requests:

  • Bestätigen neuer bzw. geänderter Daten
  • Bestätigen von Daten, die lokal gelöscht wurden

Request: Neuerungen und Änderungen bestätigen

Route

http
POST /api/v3/rest/{model}/ack

Header

text
Authorization: Bearer <bearer>

Pfad-Parameter

text
{model}: z. B. Patient oder Mitarbeiter

Body

json
{
  "token": "<device_token>",
  "ids": "1,4..10,12"
}

Request: Löschen bestätigen

Route

http
POST /api/v3/rest/{model}/cleanup

Header

text
Authorization: Bearer <bearer>

Pfad-Parameter

text
{model}: z. B. Patient oder Mitarbeiter

Body

json
{
  "token": "<device_token>",
  "ids": "1,4..10,12"
}

5. Entschlüsseln von Daten

Sensible Daten liegen nur im verschlüsselten Format vor.

Dazu gehören zum Beispiel:

  • Patienten- und Mitarbeiternamen
  • Texte, Bilder und Sprachnachrichten der Übergabebucheinträge

Diese Daten sind mit dem sogenannten DataKey verschlüsselt.

Den DataKey kann man aus dem adk-Claim im JWT extrahieren.
Dieser ist allerdings zusätzlich mit dem ACCESS-Key verschlüsselt.

Alle Daten sind mit dem Verschlüsselungsverfahren AES-256 verschlüsselt.

CuraSoft stellt Codebeispiele zum Entschlüsseln der Daten zur Verfügung.