

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

# 更新 FHIR 资源
<a name="managing-fhir-resources-update"></a>

FHIR `update` 交互为现有资源创建新的当前版本，如果给定`id`资源尚不存在任何资源，则创建初始版本。有关更多信息，请参阅 **FHIR R4 RESTful API** 文档[https://hl7.org/fhir/R4/http.html#update](https://hl7.org/fhir/R4/http.html#update)中的。

**更新 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 路径，请滚动到 “**复制**” 按钮。

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

1. 为请求构造`JSON`正文，指定要进行的 FHIR 数据更新。出于本过程的目的，请将文件另存为`update-patient.json`。

   ```
   {
       "id": "2de04858-ba65-44c1-8af1-f2fe69a977d9",
       "resourceType": "Patient",
       "active": true,
       "name": [
           {
               "use": "official",
               "family": "Doe",
               "given": [
                   "Jane"
               ]
           },
           {
               "use": "usual",
               "given": [
                   "Jane"
               ]
           }
       ],
       "gender": "female",
       "birthDate": "1985-12-31"
   }
   ```

1. 发送 请求。FHIR `update` 交互在 FHIR 授权上使用[AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 或 SMART 的`PUT`请求。以下`curl`示例更新了中的`Patient`资源 HealthLake。要查看整个示例，请滚动到 “复**制**” 按钮。

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

   Sigv4 授权

   ```
   curl --request PUT \
     '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' \
     --data @update-patient.json
   ```

   如果*更新*了现有资源，则您的请求将返回 `200` HTTP 状态码；如果创建了新资源，则将返回 `201` 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 以生成查询字符串。
   + **查询类型**-选择`Update (PUT)`。
   + **资源类型**-选择要更新或创建的 FHIR [资源类型](reference-fhir-resource-types.md)。
   + **请求正文** — 为请求构建 JSON 正文，指定用于更新资源的 FHIR 数据。

   3. 选择**运行查询**。

------

## 根据条件更新 FHIR 资源
<a name="managing-fhir-resources-update-conditional"></a>

条件更新允许您根据某些标识搜索条件而不是逻辑 FHIR `id` 更新现有资源。当服务器处理更新时，它会使用其标准搜索功能对资源类型执行搜索，目标是解析请求`id`的单个逻辑。

服务器采取的操作取决于它找到的匹配项数量：
+ **没有匹配项，请求正文中未`id`提供**匹配项：服务器创建 FHIR 资源。
+ **未`id`提供匹配项，且资源尚不存在 `id`**：服务器将交互视为 “更新即创建” 交互。
+ **没有匹配项，已`id`提供且已存在**：服务器以`409 Conflict`错误拒绝更新。
+ **One Match，未提供任何资源 OR（`id`提供的资源并且它与找到的资源相匹配）**：服务器对匹配的资源执行更新，如上所述，如果资源已更新，则服务器应返回 a `200 OK`。`id`
+ **One Match，已`id`提供资源但与找到的资源不匹配**：服务器返回`409 Conflict`错误，表明客户端 ID 规范有问题，最好是 `OperationOutcome`
+ **多个匹配项**：服务器返回一个`412 Precondition Failed`错误，表明客户端的标准选择性不够好，最好是 OperationOutcome

以下示例更新了一个名为 peter、出生日期为 2000 年 1 月 1 日、电话号码为 1234567890 的`Patient`资源。

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

## 为资源更新配置验证级别
<a name="validation-level-resource-updates"></a>

更新 FHIR 资源时，您可以选择指定 `x-amzn-healthlake-fhir-validation-level` HTTP 标头来配置资源的验证级别。 AWS HealthLake 目前支持以下验证级别：
+ `strict`：根据资源的配置文件元素对资源进行验证，如果不存在配置文件，则根据R4规格进行验证。这是的默认验证级别 AWS HealthLake。
+ `structure-only`：根据 R4 对资源进行验证，忽略任何引用的配置文件。
+ `minimal`：资源经过最低限度的验证，忽略了某些 R4 规则。未通过所需的结构检查的资源 search/analytics 将进行更新，以包括审计警告。

尽管搜索索引需要验证失败，但使用最低验证级别更新的资源仍可能会被提取到数据存储中。在这种情况下，将更新资源，以包括专门用于记录上述故障的 Healthlake 扩展程序：

```
{
    "url": "http://healthlake.amazonaws.com/fhir/StructureDefinition/validation-issue",
    "valueString": "{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"severity\":\"error\",\"code\":\"processing\",\"details\":{\"text\":\"FHIR resource in payload failed FHIR validation rules.\"},\"diagnostics\":\"FHIR resource in payload failed FHIR validation rules.\"}]}"
}
```

此外，将包含以下 HTTP 响应标头，其值为 “true”：

```
x-amzn-healthlake-validation-issues : true
```

**注意**  
请注意，如果存在这些错误，则根据 R4 规范提取的数据可能无法按预期进行搜索。