기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
PATCH 작업을 사용하여 리소스 수정
AWS HealthLake 는 FHIR 리소스에 대한 PATCH 작업을 지원하므로 전체 리소스를 업데이트하지 않고 추가, 교체 또는 삭제할 특정 요소를 대상으로 하여 리소스를 수정할 수 있습니다. 이 작업은 다음이 필요한 경우에 특히 유용합니다.
-
대규모 리소스에 대한 대상 업데이트 수행
-
네트워크 대역폭 사용량 감소
-
특정 리소스 요소에 대한 원자성 수정 수행
-
동시 변경 사항 덮어쓰기 위험 최소화
-
배치 및 트랜잭션 워크플로의 일부로 리소스 업데이트
지원되는 패치 형식
AWS HealthLake 는 두 가지 표준 패치 형식을 지원합니다.
JSON 패치(RFC 6902)
JSON 포인터 구문을 사용하여 리소스 구조의 위치별로 요소를 대상으로 지정합니다.
Content-Type: application/json-patch+json
FHIRPath 패치(FHIR R4 사양)
FHIRPath 표현식을 사용하여 콘텐츠 및 관계를 기준으로 요소를 대상으로 지정하여 패치 적용에 대한 FHIR 네이티브 접근 방식을 제공합니다.
Content-Type: application/fhir+json
사용법
직접 패치 작업
PATCH HTTP 메서드를 사용하여 FHIR 리소스에서 PATCH 작업을 직접 호출할 수 있습니다.
PATCH [base]/[resource-type]/[id]{?_format=[mime-type]}
번들의 패치
패치 작업은 batch 또는 유형의 FHIR 번들 내에 항목으로 포함될 수 transaction있으므로 패치 작업을 단일 요청으로 다른 FHIR 상호 작용(생성, 읽기, 업데이트, 삭제)과 결합할 수 있습니다.
-
트랜잭션 번들: 모든 항목이 원자적으로 성공하거나 실패함
-
배치 번들: 각 항목은 독립적으로 처리됩니다.
JSON 패치 형식
지원되는 작업
| 연산 | 설명 |
|---|---|
add |
리소스에 새 값 추가 |
remove |
리소스에서 값 제거 |
replace |
리소스의 기존 값 바꾸기 |
move |
한 위치에서 값을 제거하고 다른 위치에 추가 |
copy |
한 위치에서 다른 위치로 값 복사 |
test |
대상 위치의 값이 지정된 값과 동일한지 테스트 |
경로 구문
JSON 패치는 JSON 포인터 구문(RFC 6901)을 사용합니다.
| 경로 예제 | 설명 |
|---|---|
/name/0/family |
이름의 패밀리 요소 |
/telecom/- |
통신 배열에 추가 |
/active |
루트 수준 활성 요소 |
/address/0/line/1 |
첫 번째 주소의 두 번째 줄 |
예제
여러 작업을 사용한 직접 JSON 패치 요청
PATCH [base]/Patient/example
Content-Type: application/json-patch+json
If-Match: W/"1"
[
{
"op": "replace",
"path": "/name/0/family",
"value": "Smith"
},
{
"op": "add",
"path": "/telecom/-",
"value": {
"system": "phone",
"value": "555-555-5555",
"use": "home"
}
},
{
"op": "remove",
"path": "/address/0"
},
{
"op": "move",
"from": "/name/0/family",
"path": "/name/1/family"
},
{
"op": "test",
"path": "/gender",
"value": "male"
},
{
"op": "copy",
"from": "/name/0",
"path": "/name/1"
}
]
단일 작업으로 직접 JSON 패치 요청
PATCH [base]/Patient/example
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/active",
"value": false
}
]
번들의 JSON 패치
base64로 인코딩된 JSON 패치 페이로드를 포함하는 바이너리 리소스를 사용합니다.
{
"resourceType": "Bundle",
"type": "transaction",
"entry": [{
"resource": {
"resourceType": "Binary",
"contentType": "application/json-patch+json",
"data": "W3sib3AiOiJhZGQiLCJwYXRoIjoiL2JpcnRoRGF0ZSIsInZhbHVlIjoiMTk5MC0wMS0wMSJ9XQ=="
},
"request": {
"method": "PATCH",
"url": "Patient/123"
}
}]
}
FHIRPath 패치 형식
지원되는 작업
| 연산 | 설명 |
|---|---|
add |
리소스에 새 요소 추가 |
insert |
목록의 특정 위치에 요소 삽입 |
delete |
리소스에서 요소 제거 |
replace |
기존 요소의 값 바꾸기 |
move |
목록 내 요소 재정렬 |
경로 구문
FHIRPath 패치는 FHIRPath 표현식을 사용하여 다음을 지원합니다.
-
인덱스 기반 액세스:
Patient.name[0] -
를 사용한 필터링
where():Patient.name.where(use = 'official') -
부울 로직:
Patient.telecom.where(system = 'phone' and use = 'work') -
함수 하위 설정:
first(),last() -
존재 확인:
exists(),count() -
다형성 탐색:
Observation.value
예제
직접 FHIRPath 패치 요청
PATCH [base]/Patient/123
Content-Type: application/fhir+json
Authorization: ...
{
"resourceType": "Parameters",
"parameter": [{
"name": "operation",
"part": [
{ "name": "type", "valueCode": "add" },
{ "name": "path", "valueString": "Patient" },
{ "name": "name", "valueString": "birthDate" },
{ "name": "value", "valueDate": "1990-01-01" }
]
}]
}
번들의 FHIRPath 패치
파라미터 리소스를의 항목 리소스로 사용합니다method: PATCH.
{
"resourceType": "Bundle",
"type": "transaction",
"entry": [{
"resource": {
"resourceType": "Parameters",
"parameter": [{
"name": "operation",
"part": [
{ "name": "type", "valueCode": "add" },
{ "name": "path", "valueString": "Patient" },
{ "name": "name", "valueString": "birthDate" },
{ "name": "value", "valueDate": "1990-01-01" }
]
}]
},
"request": {
"method": "PATCH",
"url": "Patient/123"
}
}]
}
요청 헤더
| 헤더 | 필수 | 설명 |
|---|---|---|
Content-Type |
예 | application/json-patch+json JSON 패치의 경우 또는 FHIRPath 패치application/fhir+json의 경우 |
If-Match |
아니요 | ETag를 사용한 버전별 조건부 업데이트 |
샘플 응답
작업은 새 버전 정보와 함께 업데이트된 리소스를 반환합니다.
HTTP/1.1 200 OK
Content-Type: application/fhir+json
ETag: W/"2"
Last-Modified: Mon, 05 May 2025 10:10:10 GMT
{
"resourceType": "Patient",
"id": "example",
"active": true,
"name": [
{
"family": "Smith",
"given": ["John"]
}
],
"telecom": [
{
"system": "phone",
"value": "555-555-5555",
"use": "home"
}
],
"meta": {
"versionId": "2",
"lastUpdated": "2025-05-05T10:10:10Z"
}
}
동작
PATCH 작업:
-
적절한 사양에 따라 패치 구문을 검증합니다(JSON 패치의 경우 RFC 6902, FHIRPath 패치의 경우 FHIRPath R4).
-
원자적으로 작업 적용 - 모든 작업이 성공하거나 모두 실패함
-
리소스 버전 ID를 업데이트하고 새 기록 항목을 생성합니다.
-
변경 사항을 적용하기 전에 기록에서 원래 리소스를 보존합니다.
-
패치 적용 후 FHIR 리소스 제약 조건 검증
-
ETag와 If-Match 헤더를 사용한 조건부 업데이트 지원
오류 처리
작업은 다음 오류 조건을 처리합니다.
-
400 잘못된 요청: 잘못된 패치 구문(부적합 요청 또는 잘못된 패치 문서)
-
404 찾을 수 없음: 리소스를 찾을 수 없음(지정된 ID가 존재하지 않음)
-
409 충돌: 버전 충돌(동시 업데이트 또는 비최신 버전 ID 제공)
-
422 처리 불가능한 엔터티: 지정된 리소스 요소에 패치 작업을 적용할 수 없습니다.
기능 요약
| 기능 | JSON 패치 | FHIRPath 패치 |
|---|---|---|
| 콘텐츠 유형 | application/json-patch+json |
application/fhir+json |
| 경로 형식 | JSON 포인터(RFC 6901) | FHIRPath 표현식 |
| 직접 패치 API | 지원됨 | 지원됨 |
| 번들 배치 | 지원됨(바이너리를 통해) | 지원됨(파라미터를 통해) |
| 번들 트랜잭션 | 지원됨(바이너리를 통해) | 지원됨(파라미터를 통해) |
| 운영 | 추가, 제거, 교체, 이동, 복사, 테스트 | 추가, 삽입, 삭제, 교체, 이동 |
제한 사항
-
검색 조건을 사용하는 조건부 PATCH 작업은 지원되지 않습니다.
-
번들의 JSON 패치는 base64 인코딩 콘텐츠와 함께 바이너리 리소스를 사용해야 합니다.
-
번들의 FHIRPath 패치는 파라미터 리소스를 사용해야 합니다.
추가 리소스
PATCH 작업에 대한 자세한 내용은 다음을 참조하세요.