Auf dieser Seite wird erläutert, wie Sie Entitäts-Tags (ETags) zur Parallelitätsverwaltung mit FHIR-Ressourcen in der Cloud Healthcare API verwenden. ETags verhindern Datenverluste und verbessern die Anwendungsleistung, indem sie optimistische Nebenläufigkeitserkennung und clientseitiges Caching.
ETags verstehen
Ein ETag dient als eindeutige Kennung für den aktuellen Status einer FHIR-Ressource auf dem Server, ähnlich einem Versionsnummer. Jedes Mal, wenn eine FHIR-Ressource erstellt oder geändert wird, wird ein neuer ETag-Wert generiert.
Sie können ETags verwenden, um die Datenintegrität sicherzustellen und die Leistung in folgenden Bereichen zu optimieren: Situationen:
Um optimistische Nebenläufigkeitserkennung zu gewährleisten: Wenn Sie einen ETag in eine Anfrage zur Änderung einer FHIR-Ressource aufnehmen, überprüft die Cloud Healthcare API, ob das ETag mit der neuesten Version von der FHIR-Ressource auf dem Server. So verhindern Sie, dass ein Kunde versehentlich Änderungen eines anderen Clients überschreibt. Dies bezeichnet man als Schreib-Schreib-Konflikt. oder das Problem mit einem verlorenen Update.
Bedingte Anfragen senden: ETags ermöglichen es Clients, unter bestimmten Bedingungen wenn bestimmte Bedingungen erfüllt sind. Dadurch wird die Datenabfrage optimiert und unnötiger Netzwerkverkehr reduziert. Sie können beispielsweise bedingten Anfragen mit den folgenden HTTP-Headern:
If-Match
: Die Anfrage ist nur erfolgreich, wenn das bereitgestellte ETag mit dem aktuellen ETag auf dem Server. Dadurch wird sichergestellt, dass Sie Version der FHIR-Ressource.If-None-Match
: Die Anfrage ist nur erfolgreich, wenn das angegebene ETag nicht mit dem aktuellen ETag auf dem Server übereinstimmen. So sehen Sie, wenn die lokal im Cache gespeicherte Version einer Ressource noch aktuell ist, Dadurch muss nicht jedes Mal die vollständige Ressource vom Server abgerufen werden. Dies wird häufig für effizientes Caching verwendet.
FHIR-ETags nutzen eine schwache Validierung, Das heißt, sie sind möglicherweise nicht auf verschiedenen Serverinstanzen identisch, dennoch können sie Ressourcenänderungen effektiv nachverfolgen.
ETag abrufen
Die folgenden Beispiele zeigen, wie Sie den ETag einer FHIR-Ressource abrufen.
Das ETag ist im vollständigen HTTP-Antwortheader enthalten, wenn Sie
Inhalt abrufen
einer FHIR-Ressource. Das ETag stimmt mit dem Meta.versionId
überein.
in der FHIR-Ressource.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_ID
ist die ID Ihres Google Cloud-ProjektsLOCATION
ist der Standort des DatasetsDATASET_ID
: das übergeordnete Dataset des FHIR-SpeichersFHIR_STORE_ID
: die FHIR-Speicher-IDFHIR_RESOURCE_TYPE
ist der FHIR-RessourcentypFHIR_RESOURCE_ID
: die FHIR-Ressourcen-ID
curl
Verwenden Sie die Methode fhir.read
. Das Flag -verbose
gibt den Fehlerwert
HTTP-Header in der Antwort, die das ETag enthalten.
curl -X GET \ -verbose \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID"
Die Antwort enthält Folgendes:
< etag: W/"ETAG_VALUE"
PowerShell
Verwenden Sie die Methode fhir.read
. Das Flag -Headers
gibt die HTTP-Header in der Antwort zurück, die den
ETag.
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID" | Select-Object -Expand Headers
Die Antwort enthält Folgendes:
ETag {W/"ETAG_VALUE"}
Nebenläufigkeit beim Aktualisieren einer FHIR-Ressource verwalten
In den folgenden Beispielen wird gezeigt, wie Sie beim Aktualisieren einer FHIR-Ressource ein ETag angeben.
In den Beispielen wird If-Match
verwendet. Dabei gilt Folgendes:
Wenn der ETag mit dem aktuellen ETag der FHIR-Ressource auf dem Server übereinstimmt, ist die Aktualisierung erfolgreich und der Server generiert ein neues ETag für die aktualisierte Ressource. Dadurch wird sichergestellt, dass Sie die erwartete Version der FHIR-Ressource aktualisieren.
Stimmt der ETag nicht überein, schlägt die Aktualisierung mit der Meldung
412 Precondition Failed
fehl. Fehler, der darauf hinweist, dass ein anderer Client die Ressource seit dem ursprünglichen ETag wurde abgerufen. So werden Datenverluste durch versehentliches Überschreiben verhindert.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
ETAG_VALUE
: der ETag-Wert der FHIR-RessourcePROJECT_ID
ist die ID Ihres Google Cloud-ProjektsLOCATION
ist der Standort des DatasetsDATASET_ID
: das übergeordnete Dataset des FHIR-SpeichersFHIR_STORE_ID
: die FHIR-Speicher-IDFHIR_RESOURCE_TYPE
ist der FHIR-RessourcentypFHIR_RESOURCE_ID
: die FHIR-Ressourcen-ID
curl
Verwenden Sie die Methode fhir.update
.
curl -X PUT \ -H "If-Match: W/\"ETAG_VALUE\"" \ -H "Content-Type: application/json; charset=utf-8" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d @request.json \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID"
Die Antwort enthält die aktualisierte FHIR-Ressource.
PowerShell
Verwenden Sie die Methode fhir.update
.
$cred = gcloud auth print-access-token $etag = W/\"ETAG_VALUE\"" $headers = @{ "Authorization" = "Bearer $cred" "If-Match" = "$etag"} Invoke-WebRequest ` -Method PUT ` -Headers $headers ` -InFile request.json ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID" | Select-Object -Expand Content
Die Antwort enthält die aktualisierte FHIR-Ressource.
Clientseitiges Caching implementieren
Sie können ETags verwenden, um clientseitiges Caching zu implementieren, was die Datenverarbeitung beschleunigt. und trägt zu einer reibungsloseren, reaktionsschnelleren Nutzererfahrung bei.
Wenn Sie eine zuvor im Cache gespeicherte FHIR-Ressource abrufen möchten, können Sie das im Cache gespeicherte ETag in den Header If-None-Match
einfügen. Dabei gilt Folgendes:
Wenn die ETags übereinstimmen, antwortet der Server mit
304 Not Modified
und der verwendet seine Cache-Kopie. Das spart Bandbreite und die Serverlast wird reduziert.Wenn die ETags nicht übereinstimmen, sendet der Server die aktualisierte FHIR-Ressource und neuen ETag, sodass der Client seinen Cache aktualisieren kann.
Die folgenden Beispiele zeigen, wie der Inhalt einer FHIR-Ressource mit einem ETag abgerufen wird, das mit dem ETag auf dem Server übereinstimmt.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
ETAG_VALUE
: der ETag-Wert der FHIR-RessourcePROJECT_ID
ist die ID Ihres Google Cloud-ProjektsLOCATION
ist der Standort des DatasetsDATASET_ID
: das übergeordnete Dataset des FHIR-SpeichersFHIR_STORE_ID
: die FHIR-Speicher-IDFHIR_RESOURCE_TYPE
ist der FHIR-RessourcentypFHIR_RESOURCE_ID
: die FHIR-Ressourcen-ID
curl
Verwenden Sie die Methode fhir.read
. Das Flag -verbose
gibt den Fehlerwert
HTTP-Header in der Antwort, andernfalls wird keine Antwort zurückgegeben.
curl -X GET \ -H "If-None-Match: W/\"ETAG_VALUE\"" \ -v \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID"
Die Antwort enthält den Statuscode 304 Not Modified
.
PowerShell
Verwenden Sie die Methode fhir.read
. Das Flag -Headers
gibt die HTTP-Header in der Antwort zurück. Andernfalls wird keine Antwort zurückgegeben.
zurückgegeben.
$cred = gcloud auth print-access-token $etag = W/\"ETAG_VALUE\"" $headers = @{ "Authorization" = "Bearer $cred" "If-None-Match" = "$etag"} Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID" | Select-Object -Expand Headers
Die Antwort enthält den Statuscode 304 Not Modified
.