En esta página, se explica cómo usar etiquetas de entidad (ETags) para la administración de simultaneidad con recursos de FHIR en la API de Cloud Healthcare. Los ETag ayudan a prevenir la pérdida de datos y mejorar el rendimiento de la aplicación habilitando control de simultaneidad optimista y el almacenamiento en caché del cliente.
Comprender las ETags
Una ETag funciona como un identificador único para el estado actual de un recurso de FHIR en el servidor, similar a un número de versión. Cada vez que se crea o modifica un recurso de FHIR se genera un valor de ETag nuevo.
Puedes usar ETags para garantizar la integridad de los datos y optimizar el rendimiento en los siguientes situaciones:
Para garantizar un control de simultaneidad optimista: cuando incluyes una ETag en una solicitud para modificar un recurso de FHIR, la API de Cloud Healthcare verifica si la ETag coincide con la versión más reciente del el recurso de FHIR en el servidor. Esto ayuda a evitar que un cliente reemplace accidentalmente los cambios que realizó otro cliente, también se denomina conflicto de escritura y escritura. o el "problema de actualización perdida".
Envío de solicitudes condicionales: Los ETags permiten que los clientes envíen solicitudes de forma condicional solo cuando se cumplen condiciones específicas. Esto optimiza los datos en la recuperación y reduce el tráfico de red innecesario. Por ejemplo, puedes enviar solicitudes condicionales con los siguientes encabezados HTTP:
If-Match
: La solicitud solo se realiza correctamente si la ETag proporcionada coincide con la ETag actual del servidor. Así, podrás asegurarte de actualizar del recurso de FHIR.If-None-Match
: La solicitud solo se realiza de forma correcta si la ETag proporcionada no se realiza correctamente. coincidir con la ETag actual en el servidor. Esto te permitirá saber Si la versión de un recurso almacenada en caché localmente sigue actualizada lo que reduce la necesidad de recuperar el recurso completo del servidor cada vez. Por lo general, se usa para un almacenamiento en caché eficiente.
Las ETag de FHIR usan validación débil, lo que significa que podrían no ser idénticos en diferentes instancias del servidor, siguen realizando un seguimiento eficaz de los cambios de los recursos.
Cómo obtener una ETag
En los siguientes ejemplos, se muestra cómo obtener la ETag de un recurso de FHIR.
La ETag se incluye en el encabezado de respuesta HTTP completo cuando
obtener el contenido
de un recurso de FHIR. La ETag coincide con el Meta.versionId
en el recurso de FHIR.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID
El ID de tu proyecto de Google Cloud.LOCATION
: La ubicación del conjunto de datosDATASET_ID
es el conjunto de datos superior del almacén de FHIRFHIR_STORE_ID
es el ID del almacén de FHIRFHIR_RESOURCE_TYPE
: Es el tipo de recurso de FHIR.FHIR_RESOURCE_ID
: Es el ID del recurso de FHIR.
curl
Usa el método fhir.read
. La marca -verbose
muestra
Encabezados HTTP en la respuesta, que contienen la ETag
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"
La respuesta contiene lo siguiente:
< etag: W/"ETAG_VALUE"
PowerShell
Usa el método fhir.read
. La marca -Headers
muestra los encabezados HTTP en la respuesta, que contienen los
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
La respuesta contiene lo siguiente:
ETag {W/"ETAG_VALUE"}
Administra la simultaneidad cuando se actualiza un recurso de FHIR
En los siguientes ejemplos, se muestra cómo incluir una ETag cuando se actualiza un recurso de FHIR.
Las muestras usan If-Match
,
que tiene el siguiente comportamiento:
Si la ETag coincide con la actual del recurso FHIR en el servidor, la actualización se realizará correctamente, y el servidor generará una ETag nueva para el recurso actualizado. Esto garantiza que se actualice la versión esperada del recurso de FHIR.
Si la ETag no coincide, la actualización falla con una
412 Precondition Failed
. indica que otro cliente modificó el recurso desde el Se recuperó la ETag. Esto evita la pérdida de datos debido a reemplazos accidentales.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
ETAG_VALUE
: el valor de la ETag del recurso de FHIRPROJECT_ID
El ID de tu proyecto de Google Cloud.LOCATION
: La ubicación del conjunto de datosDATASET_ID
es el conjunto de datos superior del almacén de FHIRFHIR_STORE_ID
es el ID del almacén de FHIRFHIR_RESOURCE_TYPE
: Es el tipo de recurso de FHIR.FHIR_RESOURCE_ID
: Es el ID del recurso de FHIR.
curl
Usa el método 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"
La respuesta contiene el recurso de FHIR actualizado.
PowerShell
Usa el método 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
La respuesta contiene el recurso de FHIR actualizado.
Implementa el almacenamiento en caché del cliente
Puedes usar ETags para implementar el almacenamiento en caché del cliente, lo que acelera los datos de datos y contribuye a una experiencia del usuario más fluida y responsiva.
Para recuperar un recurso de FHIR previamente almacenado en caché, puedes incluir la ETag almacenada en caché
en la If-None-Match
encabezado, que tiene el siguiente comportamiento:
Si los ETags coinciden, el servidor responde con
304 Not Modified
y el cliente usa su copia almacenada en caché. Esto ahorra ancho de banda y reduce la carga del servidor.Si los ETags no coinciden, el servidor envía el recurso FHIR actualizado y su nueva ETag, lo que le permite al cliente actualizar su caché.
En los siguientes ejemplos, se muestra cómo obtener el contenido de un recurso de FHIR usando una ETag que coincida con la del servidor.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
ETAG_VALUE
: el valor de la ETag del recurso de FHIRPROJECT_ID
El ID de tu proyecto de Google Cloud.LOCATION
: La ubicación del conjunto de datosDATASET_ID
es el conjunto de datos superior del almacén de FHIRFHIR_STORE_ID
es el ID del almacén de FHIRFHIR_RESOURCE_TYPE
: Es el tipo de recurso de FHIR.FHIR_RESOURCE_ID
: Es el ID del recurso de FHIR.
curl
Usa el método fhir.read
. La marca -verbose
muestra
encabezados HTTP en la respuesta; de lo contrario, no se muestra ninguna respuesta.
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"
La respuesta contiene un código de estado 304 Not Modified
.
PowerShell
Usa el método fhir.read
. La marca -Headers
muestra los encabezados HTTP en la respuesta; de lo contrario, no recibe respuesta.
el resultado.
$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
La respuesta contiene un código de estado 304 Not Modified
.