

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

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

FHIR `delete` 交互将现有的 FHIR 资源从 HealthLake数据存储中移除。有关更多信息，请参阅 * * FHIR R4 RESTful API 文档[`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 ]

   [`IdentityProviderConfiguration`](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 无内容）

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

1. **多个匹配项**：返回 412 前提条件失败错误，表明客户端的标准选择性不够

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

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

**成功的操作**  

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

**ID-Based 有条件删除**  
根据`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. 为高并发环境中的时间冲突做好准备，在这些环境中，搜索和删除操作之间可能会修改资源。