

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

FHIR `delete` 交互会将现有的 FHIR 资源从 HealthLake数据存储中移除。有关更多信息，请参阅 **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` 交互在 FHIR 授权上使用[AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 或 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)数据类型的 SMART on FHIR 授权示例。

   ```
   {
       "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. 选择**运行查询**。

------

## 根据条件删除 FHIR 资源
<a name="conditional-delete-fhir"></a>

当您不知道特定的 FHIR 资源 ID 但有关于要删除的资源的其他识别信息时，条件删除特别有用。

有条件删除允许您根据搜索标准而不是逻辑 FHIR ID 删除现有资源。当服务器处理删除请求时，它会使用标准搜索功能对资源类型执行搜索，以解析请求的单个逻辑 ID。

### 有条件删除的工作原理
<a name="conditional-delete-works"></a>

**服务器的操作取决于它找到的匹配项数量：**  


1. **无匹配项**：服务器尝试普通删除并做出相应响应（404 表示资源不存在，204 表示已删除的资源为 No Content）

1. **一场匹配**：服务器对匹配的资源执行普通删除

1. **多个匹配项**：返回 412 Precondition Failed 错误，表示客户端的标准选择性不足

### 响应场景
<a name="response-scenerios"></a>

AWS HealthLake 使用以下响应模式处理有条件的删除操作：

**成功运营**  

+ 当您的搜索条件成功识别出单个活动资源时，系统将在完成删除后返回 **204 No Conten** t，就像标准删除操作一样。

**基于身份的有条件删除**  
根据`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
```

此请求会删除患者资源，其中：
+ 名字叫 “彼得”
+ 出生日期是 2000 年 1 月 1 日
+ 电话号码是 1234567890

**最佳实践**  


1. 使用特定的搜索条件来避免多个匹配项并防止 412 错误。

1. 当需要处理并发修改时，可以考虑使用 ETag 标头进行版本控制。

1. 适当处理错误响应：
   + 对于 404：优化搜索条件
   + 对于 412：使标准更加具体或解决版本冲突

1. 为高并发环境中的时间冲突做好准备，在这种环境中，可能会在搜索和删除操作之间修改资源。