接口描述
用于更新指定资源 ID 对应的资源实例。该接口遵循标准 FHIR
Update 操作,客户端通过 HTTP PUT 方法向指定资源地址提交完整资源内容,服务端更新成功后返回最新版本的资源数据及版本信息。注意:
PUT 更新为全量替换操作,提交的请求体将完整覆盖目标资源的现有内容。若需要在原有资源基础上新增或修改部分字段,请求体中必须包含资源的全部字段(已有字段 + 新增字段);若仅提交部分字段,未包含的已有字段将被清除。如需仅更新局部字段而保留其余内容不变,请使用 补丁 接口(PATCH 方法 + application/json-patch+json)。本示例展示了更新
Patient 资源的调用方式,在原有患者信息基础上新增地址信息(请求体中包含完整的患者信息及新增的地址字段)。输入参数
参数名称 | 类型 | 是否必填 | 说明 |
HTTP Method | String | 是 | 固定为 PUT。 |
URL | String | 是 | 资源更新地址,格式为 [baseUrl]/[resourceType]/[id]。 |
Authorization | String | 是 | 身份认证令牌,格式为 Bearer <AccessToken>,AccessToken 通过 调用方式 中的 GetAccessToken 接口获取(实例控制台场景可通过 GetWebAccessToken 接口获取)。 |
Content-Type | String | 否 | 请求体 MIME 类型,写入类请求通常为 application/fhir+json;未指定时服务端将根据请求内容自动推断。 |
Request Body | JSON Object | 是 | 待更新的完整 FHIR 资源内容,需包含与 URL 一致的资源 ID。 PUT 为全量替换操作,请求体中未包含的字段将被清除。 |
请求 URL 示例:
https://HOSTNAME/INSTANCE_ID/fhir/Patient/id
请求体示例字段说明:
字段 | 类型 | 是否必填 | 说明 |
resourceType | String | 是 | FHIR 资源类型,本示例为 Patient。当前实例实际支持的全部资源类型,请通过 GET /INSTANCE_ID/fhir/metadata 调用 CapabilityStatement 接口,在返回的 rest[].resource[].type 中查看(实例支持的资源类型可在创建时通过 supported_resource_types 配置裁剪,不同实例可能不同)。各资源类型的字段定义可参见 FHIR Resource Types。 |
id | String | 是 | 资源唯一 ID。为服务端创建资源时自动分配的逻辑 ID,可通过以下方式获取: 调用 创建接口(POST)创建资源,从响应头 Content-Location 或响应体 id 字段获取。调用 搜索接口(GET /[resourceType]?_id= 或 /[resourceType]?identifier=)查询已有资源 ID。 |
identifier | Array | 否 | 患者标识信息。 |
name | Array | 否 | 姓名信息。 |
gender | String | 否 | |
birthDate | String | 否 | 出生日期,格式为 YYYY-MM-DD。 |
address | Array | 否 | 地址信息。 |
address[].line | Array | 否 | 街道地址。 |
address[].city | String | 否 | 城市。 |
address[].state | String | 否 | 省/州。 |
address[].postalCode | String | 否 | 邮政编码。 |
输出参数
接口调用成功后,通常返回 HTTP 状态码
200 OK,并在响应头中包含资源版本信息与最新版本地址,响应体中返回更新后的完整资源内容。部分实例可能配置为更新时不返回响应体,此时可通过响应头中的 Content-Location 地址调用 Read 接口获取完整资源内容。响应头示例说明:
参数名称 | 类型 | 说明 |
Status Code | Integer | 成功时返回 200 OK。 |
ETag | String | 资源版本标识,例如 W/"2"。 |
Content-Location | String | 更新后资源的历史版本地址。 |
x-request-id | String | 请求追踪 ID。 |
响应体主要字段说明:
字段 | 类型 | 说明 |
resourceType | String | 资源类型。 |
id | String | 被更新资源的唯一 ID。 |
meta.versionId | String | 当前资源版本号。 |
meta.lastUpdated | String | 资源最后更新时间。 |
meta.source | String | 资源来源标识,格式为 #<哈希值>。仅在资源创建或更新时指定过该字段时才返回。可通过请求头 X-Source(需服务端启用 CaptureResourceSourceFromHeaderInterceptor)或客户端直接写入 meta.source 设置,详见 FHIR Meta.source。 |
meta.profile | Array | 资源遵循的 FHIR StructureDefinition profile 列表。 |
identifier | Array | 资源标识信息。 |
name | Array | 资源姓名信息。 |
gender | String | 性别。 |
birthDate | String | 出生日期。 |
address | Array | 更新后的地址信息。 |
说明:
text 为 FHIR 资源的 Narrative(人类可读摘要)字段,包含 status 和 div 两个子字段。服务端默认不自动生成 Narrative,响应体中通常不包含 text 字段;仅当客户端在请求体中主动提供 text 字段时,服务端会将其保留并返回。text.status 的合法取值为 generated(由系统生成)、extensions(仅包含扩展信息)和 additional(包含额外内容),详见 FHIR NarrativeStatus。示例
请求示例
PUT /INSTANCE_ID/fhir/Patient/id HTTP/1.1Host: HOSTNAMEAuthorization: Bearer YOUR_ACCESS_TOKENContent-Type: application/fhir+json
{"resourceType": "Patient","id": "id","identifier": [{"system": "urn:oid:1.2.36.146.595.217.0.1","value": "12345"}],"name": [{"family": "Chalmers","given": ["Peter","James"]}],"gender": "male","birthDate": "1974-12-25","address": [{"line": ["534 Erewhon St"],"city": "PleasantVille","state": "Vic","postalCode": "3999"}]}
响应示例
HTTP/1.1 200 OKETag: W/"2"Content-Location: https://HOSTNAME/INSTANCE_ID/fhir/Patient/id/_history/2x-request-id: faiRG8M5xyXBhbvf
{"resourceType": "Patient","id": "id","meta": {"versionId": "2","lastUpdated": "2022-10-10T07:51:04.607-04:00","source": "#oYcdS7hlfUBnsSlX","profile": ["http://hl7.org/fhir/StructureDefinition/Patient"]},"identifier": [{"system": "urn:oid:1.2.36.146.595.217.0.1","value": "12345"}],"name": [{"family": "Chalmers","given": ["Peter","James"]}],"gender": "male","birthDate": "1974-12-25","address": [{"line": ["534 Erewhon St"],"city": "PleasantVille","state": "Vic","postalCode": "3999"}]}
错误码
错误码 | 说明 |
400 Bad Request | 请求参数错误,或提交的资源内容不符合 JSON/FHIR 结构要求 |
401 Unauthorized | 未认证,缺少有效身份凭证 |
403 Forbidden | 已认证但无更新该资源的权限 |
404 Not Found | 指定资源不存在 |
409 Conflict | 资源状态冲突,例如版本冲突 |
415 Unsupported Media Type | Content-Type 不受支持,例如未使用 application/fhir+json |
422 Unprocessable Entity | 资源内容通过语法校验但未通过业务或 FHIR 规则校验 |
500 Internal Server Error | 服务端内部处理异常 |