冪等和並行 - AWS HealthLake

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

冪等和並行

等冪性金鑰

AWS HealthLake 支援 FHIR POST操作的等冪性金鑰,提供強大的機制,以確保資源建立期間的資料完整性。透過在請求標頭中將唯一的 UUID 作為等冪性金鑰,醫療保健應用程式可以保證每個 FHIR 資源只建立一次,即使在涉及網路不穩定或自動重試的情況下也是如此。

此功能對於醫療保健系統特別重要,因為重複的醫療記錄可能會造成嚴重的後果。當收到具有與先前請求相同等冪性金鑰的請求時,HealthLake 會傳回原始資源,而不是建立重複的資源。例如,這可能會在重試迴圈期間發生,或是因為備援請求管道。使用冪等性金鑰可讓 HealthLake 維持資料一致性,同時為處理間歇性連線問題的用戶端應用程式提供無縫體驗。

實作

POST /<baseURL>/Patient x-amz-fhir-idempotency-key: 123e4567-e89b-12d3-a456-426614174000 { "resourceType": "Patient", "name": [...] }

回應案例

第一個請求 (已建立 201)
  • 已成功建立新資源

  • 回應包含資源 ID

重複請求 (409 衝突)
  • 偵測到相同的等冪性金鑰

  • 傳回的原始資源

  • 未建立新的資源

無效請求 (400 個無效的請求)
  • 格式錯誤的 UUID

  • 缺少必要欄位

最佳實務

  • 為每個新資源建立產生唯一的 UUID

  • 儲存等冪索引鍵以重試邏輯

  • 使用一致的金鑰格式:建議使用 UUID v4

  • 在處理資源建立的用戶端應用程式中實作

注意

對於需要嚴格資料準確性和防止重複醫療記錄的醫療保健系統來說,此功能特別重要。

AWS HealthLake 中的 ETag

AWS HealthLake 使用 ETags FHIR 資源中實現樂觀並行控制,提供可靠的機制來管理並行修改和維護資料一致性。ETag 是代表資源特定版本的唯一識別符,可透過 HTTP 標頭做為版本控制系統。讀取或修改資源時,應用程式可以使用 ETags 來防止意外覆寫並確保資料完整性,尤其是在具有潛在並行更新的情況下。

實作範例

// Initial Read GET /fhir/Patient/123 Response: ETag: W/"1" // Update with If-Match PUT /fhir/Patient/123 If-Match: W/"1" {resource content} // Create with If-None-Match PUT /fhir/Patient/123 If-None-Match: * {resource content} // Succeeds only if resource doesn't exist // Fails with 412 if resource exists

回應案例

操作成功 (200 OK 或 204 No Content)
  • ETag 符合目前版本

  • 操作會如預期進行

版本衝突 (412 先決條件失敗)
  • ETag 與目前版本不相符

  • 拒絕更新以防止資料遺失

最佳實務

  • 在所有更新和刪除操作中包含 ETags

  • 實作處理版本衝突的重試邏輯

  • 使用 If-None-Match:* 表示 create-if-not-exists 案例

  • 修改前一律驗證 ETag 新鮮度

此並行控制系統對於維護醫療保健資料的完整性至關重要,尤其是在具有多個使用者或系統存取和修改相同資源的環境中。