

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

# 刪除 FHIR 資源
<a name="managing-fhir-resources-delete"></a>

FHIR `delete`互動會從 HealthLake 資料存放區移除現有的 FHIR 資源。如需詳細資訊，請參閱 **FHIR R4 RESTful API 文件**[https://hl7.org/fhir/R4/http.html#delete](https://hl7.org/fhir/R4/http.html#delete)中的 。

**刪除 FHIR 資源**  


1. 收集 HealthLake `region`和 `datastoreId` 值。如需詳細資訊，請參閱[取得資料存放區屬性](managing-data-stores-describe.md)。

1. 決定`Resource`要刪除的 FHIR 類型，並收集相關聯的`id`值。如需詳細資訊，請參閱[資源類型](reference-fhir-resource-types.md)。

1. 使用 HealthLake `region`和 的收集值來建構請求的 URL`datastoreId`。同時包含 FHIR `Resource`類型及其相關聯的 `id`。若要在下列範例中檢視整個 URL 路徑，請捲動至**複製**按鈕。

   ```
   DELETE https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource/id
   ```

1. 傳送 請求。FHIR `delete`互動使用具有[AWS 簽章第 4 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)版或 FHIR 授權上的 SMART 的`DELETE`請求。下列`curl`範例會從 HealthLake 資料存放區移除現有的 FHIR `Patient` 資源。若要檢視整個範例，請捲動至**複製**按鈕。

------
#### [ SigV4 ]

   SigV4 授權

   ```
   curl --request DELETE \
     'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient/id' \
     --aws-sigv4 'aws:amz:region:healthlake' \
     --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \
     --header "x-amz-security-token:$AWS_SESSION_TOKEN" \
     --header 'Accept: application/json'
   ```

   伺服器會傳回 `204` HTTP 狀態碼，確認已從 HealthLake 資料存放區中移除資源。如果刪除請求失敗，您將收到`400`一系列 HTTP 狀態碼，指出請求失敗的原因。

------
#### [ SMART on FHIR ]

   [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html) 資料類型的 FHIR 上的 SMART 授權範例。

   ```
   {
       "AuthorizationStrategy": "SMART_ON_FHIR",
       "FineGrainedAuthorizationEnabled": true,
       "IdpLambdaArn": "arn:aws:lambda:your-region:your-account-id:function:your-lambda-name",
       "Metadata": "{\"issuer\":\"https://ehr.example.com\", \"jwks_uri\":\"https://ehr.example.com/.well-known/jwks.json\",\"authorization_endpoint\":\"https://ehr.example.com/auth/authorize\",\"token_endpoint\":\"https://ehr.token.com/auth/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"foo\"],\"grant_types_supported\":[\"client_credential\",\"foo\"],\"registration_endpoint\":\"https://ehr.example.com/auth/register\",\"scopes_supported\":[\"openId\",\"profile\",\"launch\"],\"response_types_supported\":[\"code\"],\"management_endpoint\":\"https://ehr.example.com/user/manage\",\"introspection_endpoint\":\"https://ehr.example.com/user/introspect\",\"revocation_endpoint\":\"https://ehr.example.com/user/revoke\",\"code_challenge_methods_supported\":[\"S256\"],\"capabilities\":[\"launch-ehr\",\"sso-openid-connect\",\"client-public\",\"permission-v2\"]}"
   }
   ```

   發起人可以在授權 lambda 中指派許可。如需詳細資訊，請參閱[OAuth 2.0 範圍](reference-smart-on-fhir-oauth-scopes.md)。

------
#### [ AWS Console ]

   1. 登入 HealthLake 主控台上的[執行查詢](https://console.aws.amazon.com/healthlake/home#/crud)頁面。

   2. 在**查詢設定**區段下，進行下列選擇。
   + **資料存放區 ID** — 選擇資料存放區 ID 以產生查詢字串。
   + **查詢類型** — 選擇 `Delete`。
   + **資源類型** — 選擇要刪除的 FHIR [資源類型](reference-fhir-resource-types.md)。
   + **資源 ID** — 輸入 FHIR 資源 ID。

   3. 選擇 **Run query** (執行查詢)。

------

## 根據條件刪除 FHIR 資源
<a name="conditional-delete-fhir"></a>

當您不知道特定 FHIR 資源 ID，但具有您要刪除之資源的其他識別資訊時，條件式刪除特別有用。

條件式刪除可讓您根據搜尋條件而非邏輯 FHIR ID 刪除現有資源。當伺服器處理刪除請求時，它會使用資源類型的標準搜尋功能執行搜尋，以解析請求的單一邏輯 ID。

### 條件式刪除的運作方式
<a name="conditional-delete-works"></a>

**伺服器的動作取決於找到多少相符項目：**  


1. **沒有相符**項目：伺服器嘗試一般刪除並適當回應 (404 找不到不存在的資源，204 找不到已刪除資源的內容）

1. **一個相符**項目：伺服器對相符的資源執行一般刪除

1. **多個相符**項目：傳回 412 先決條件失敗錯誤，指出用戶端的條件不夠選擇性

### 回應案例
<a name="response-scenerios"></a>

AWS HealthLake 使用以下回應模式處理條件式刪除操作：

**成功的操作**  

+ 當您的搜尋條件成功識別單一作用中資源時，系統會在完成刪除後傳回 **204 無內容**，就像標準刪除操作一樣。

**以 ID 為基礎的條件式刪除**  
根據 `id` 和其他參數 (`createdAt`、 `tag`或 `_lastUpdated`) 執行條件式刪除時：
+ **204 無內容**：資源已刪除
+ **找不到 404**：資源不存在
+ **409 衝突**：ID 相符，但其他參數不相符

**Non-ID-Based條件式刪除**  
`id` 未提供 或使用 `createdAt`、 `tag`或 以外的參數時`_lastUpdated`：
+ **找不到 404**：找不到相符項目

**衝突情況**  
數個案例會產生 412 先決條件失敗回應：
+ 多個資源符合您的搜尋條件 （條件不夠具體）
+ 搭配 使用 ETag 標頭時的版本衝突 `If-Match`
+ 在搜尋和刪除操作之間發生資源更新

**成功條件式刪除的範例**  
下列範例會根據特定條件刪除病患資源：

```
DELETE https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?name=peter&birthdate=2000-01-01&phone=1234567890
```

此請求會刪除病患資源，其中：
+ 名稱為「peter」
+ 出生日期是 2000 年 1 月 1 日
+ 電話號碼為 1234567890

**最佳實務**  


1. 使用特定的搜尋條件來避免多個相符項目，並防止 412 錯誤。

1. 需要處理並行修改時，請考慮使用版本控制的 ETag 標頭。

1. 適當地處理錯誤回應：
   + 對於 404：精簡您的搜尋條件
   + 對於 412：讓條件更具體或解決版本衝突

1. 準備在高並行環境中的時間衝突，其中可能會在搜尋和刪除操作之間修改資源。