이 페이지에서는 Cloud Healthcare API가 FHIR 리소스 참조를 지원하는 방법을 설명합니다.
개요
FHIR 리소스 참조는 소스 리소스에서 대상 리소스로의 방향 연결입니다. FHIR 리소스 참조를 사용하여 리소스를 연결할 수 있습니다. 예를 들어 FHIR 리소스 유형 Observation
에는 참조 유형의 subject
필드가 있으며 관찰 대상으로 Patient
리소스에 연결하는 데 사용할 수 있습니다.
FHIR 리소스 참조도 순환될 수 있습니다. 예를 들어 FHIR 리소스 유형 CarePlan
에는 다른 CarePlan
을 가리킬 수 있는 replaces
필드가 있습니다.
FHIR 참조 구조의 가장 중요한 요소는 참조입니다.
display
및 identifier
과 같은 다른 요소는 Cloud Healthcare API에 있는 것처럼 유지됩니다.
Cloud Healthcare API에서 지원되는 Reference.reference
형식은 다음과 같습니다.
로컬 리소스 참조
리소스 참조는 RESOURCE_TYPE/RESOURCE_ID
로 정의됩니다.
또한 Cloud Healthcare API는 전체 FHIR 저장소 이름을 RESOURCE_TYPE/RESOURCE_ID
앞에 추가하는 것을 지원합니다. 예를 들면 FHIR_STORE_NAME/RESOURCE_TYPE/RESOURCE_ID
입니다.
이 형식을 사용하는 경우 매장 이름은 요청의 FHIR 저장소와 일치해야 합니다.
그렇지 않은 경우 로컬이 아닌 참조로 인해 요청이 거부됩니다.
저장 구성 옵션 FhirStore.disableReferentialIntegrity
는 기본적으로 사용 설정되는 로컬 참조 유효성 검사의 참조 무결성을 제어합니다. 참조 무결성 확인에 대한 자세한 내용은 FHIR 참조 무결성을 참조하세요.
버전이 지정된 참조
Cloud Healthcare API는 대상 리소스의 특정 버전에 대한 참조를 지원합니다. 대상 리소스의 특정 버전으로 연결하려면 로컬 참조에서 RESOURCE_ID/_history/VERSION_ID
] 형식을 사용합니다.
참조 무결성 검사가 사용 설정되면 서버는 FHIR 저장소에 이전 버전이 있는지 확인합니다. Resource-purge
메서드는 참조 여부와 상관없이 이전 버전을 삭제합니다.
조건부 참조
대상 리소스 ID를 명시적으로 지정하는 대신 executeBundle
은 요청 시 대상 리소스 ID로 확인되는 대상 리소스의 조건부 참조 검색어를 허용합니다. 예를 들면 Patient?identifier=abc
입니다.
검색어가 대상 리소스로 확인되지 않거나 두 개 이상의 대상 리소스로 확인되는 경우 참조 무결성 검사가 사용 설정되었는지 여부와 관계없이 서버가 요청을 거부합니다.
urn:uuid
또는 urn:oid
로 시작하는 URI
트랜잭션 번들과 함께 executeBundle
메서드를 사용하는 경우 범용 고유 식별자(UUID) 또는 객체 식별자(OID) 참조를 사용하여 동일한 번들에서 생성되거나 업데이트되는 다른 리소스에 대한 참조를 확인할 수 있습니다. 자세한 내용은 FHIR 번들 관리 가이드를 참조하세요.
전체 외부 URL
http://www.example.com/abc
와 같은 전체 외부 URL은 참조 필드에 수정되지 않은 상태로 저장됩니다. Cloud Healthcare API는 URL을 확인하지 않거나 유효성 검사를 시도하지 않습니다.
전체 외부 URL이 요청의 FHIR 저장소 전체 URL과 일치하면 참조는 로컬 리소스 참조로 간주됩니다.
프래그먼트 참조
프래그먼트 참조는 리소스에서 인라인 처리된 포함된 리소스를 가리킵니다. 예를 들어 관찰 레코드에 일반 실무자가 언급되지만 관리된 실무자 디렉터리가 없는 경우 전체 실무자 리소스를 만들 수 없습니다. 일반 실무자는 관찰 레코드에 포함된 리소스입니다. 리소스의 참조 필드는 #[INLINE_RESOURCE_ID]
형식을 사용하는 인라인 처리된 리소스를 가리킬 수 있습니다.
다음 FHIR R4 샘플에서 p1
및 p2
는 #p1
및 #p2
로 참조되는 인라인 리소스 ID입니다.
{
"resourceType": "Observation",
"contained": [
{
"resourceType":"Patient",
"id": "p1",
"generalPractitioner": {"reference": "#p2"}
},
{
"resourceType":"Practitioner",
"id": "p2"
}
],
"status": "final",
"subject": {"reference": "#p1"},
"performer": [{"reference": "#p2"}]
}
[INLINE_RESOURCE_ID]
는 리소스 내에 포함된 리소스로 존재해야 하며 그렇지 않으면 서버가 요청을 거부합니다. 포함된 리소스는 컨테이너 또는 동일한 컨테이너 내에 있는 다른 포함된 리소스에 의해서만 참조될 수 있습니다.