参照整合性の検証
FRUCtoS サーバではリファレンス要素で指定されるリソースの参照整合性を検証する目的でリファレンス要素の値を変換する場合があります。
本章の参照整合性とは、リファレンス要素で指定されたリソースが自サーバに存在するかどうかを検証するための仕組みです。
※ 外部リソース参照は参照整合性の検証対象外です。
create, update, batch / transaction インタラクション実行時は、リクエストのリソース内に存在するリファレンス要素が後述の条件を満たす場合、 絶対 URL の相対化( [type]/[id] 形式)、または相対 URL の絶対化を行います。
リファレンス要素の値は相対化または絶対化した形式でサーバに登録されます。
単一リソース
リファレンス要素が 自サーバの URL の絶対参照である場合のみ相対化を行います。
リファレンス要素 | 変換 | 参照整合性 の検証 |
---|---|---|
絶対参照(自サーバ) (例) http://localhost:8080/fructos/Organization/1 | 相対化 (例) Organization/1 | ○ |
絶対参照(外部サーバ) (例) http://example.org/fhir/Organization/1 | - | × |
相対参照 (例) Organization/1 | - | ○ |
絶対参照(自サーバ)
単一リソース内に存在するリファレンス要素が絶対参照であり、そのベース URL が自サーバの URL の場合は相対化を行います。
(例)Patient リソースの managingOrganization.reference
要素が絶対参照(ベース URL が自サーバのURL)の場合
POST [base]/Patient
- リクエストボディ
{
"resourceType": "Patient",
"active": true,
"name": [
{
"use": "official",
"family": "Donald",
"given": [
"Duck"
]
}
],
"gender": "male",
"managingOrganization": {
"reference": "http://localhost:8080/fructos/Organization/1",
"display": "ACME Healthcare, Inc"
}
}
managingOrganization.reference
要素の値「 http://localhost:8080/fructos/Organization/1
」を「 Organization/1
」 に相対化します。
managingOrganization.reference
要素で指定された Organization リソースが自サーバに登録されている場合は以下のレスポンスを返却します。
- レスポンスボディ
201 Created
{
"resourceType": "Patient",
"id": "2",
"meta": {
"versionId": "1",
"lastUpdated": "2021-10-26T16:08:27.331+09:00"
},
"active": true,
"name": [
{
"use": "official",
"family": "Donald",
"given": [
"Duck"
]
}
],
"gender": "male",
"managingOrganization": {
"reference": "Organization/1",
"display": "ACME Healthcare, Inc"
}
}
managingOrganization.reference
要素で指定された Organization リソースが自サーバに登録されていない場合はエラーを返却します。
- レスポンスボディ
400 Bad Request
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "fatal",
"code": "invalid",
"details": {
"text": "The referenced resource \"Organization/1\" does not exist."
},
"diagnostics": "The referenced resource \"Organization/1\" does not exist."
}
]
}
絶対参照(外部サーバ)
単一リソース内に存在するリファレンス要素が絶対参照であり、そのベース URL が外部サーバ URL の場合は相対化を行いません。
(例)Patient リソースの managingOrganization.reference
要素が絶対参照(ベース URL が外部サーバ URL)の場合
POST [base]/Patient
- リクエストボディ
{
"resourceType": "Patient",
"active": true,
"name": [
{
"use": "official",
"family": "Donald",
"given": [
"Duck"
]
}
],
"gender": "male",
"managingOrganization": {
"reference": "http://example.org/fhir/Organization/1",
"display": "ACME Healthcare, Inc"
}
}
外部リソースの参照整合性は検証しないため、Patient リソースが FHIR 仕様に準拠している場合は以下のレスポンスを返却します。
- レスポンスボディ
201 Created
{
"resourceType": "Patient",
"id": "2",
"meta": {
"versionId": "1",
"lastUpdated": "2021-10-26T15:39:42.927+09:00"
},
"active": true,
"name": [
{
"use": "official",
"family": "Donald",
"given": [
"Duck"
]
}
],
"gender": "male",
"managingOrganization": {
"reference": "http://example.org/fhir/Organization/1",
"display": "ACME Healthcare, Inc"
}
}
相対参照
単一リソース内に存在するリファレンス要素が相対参照の場合は絶対化を行いません。
(例)Patient リソースの managingOrganization.reference
要素が相対参照の場合
POST [base]/Patient
- リクエストボディ
{
"resourceType": "Patient",
"active": true,
"name": [
{
"use": "official",
"family": "Donald",
"given": [
"Duck"
]
}
],
"gender": "male",
"managingOrganization": {
"reference": "Organization/1",
"display": "ACME Healthcare, Inc"
}
}
managingOrganization.reference
要素で指定された Organization リソースが自サーバに登録されている場合は以下のレスポンスを返却します。
- レスポンスボディ
201 Created
{
"resourceType": "Patient",
"id": "9",
"meta": {
"versionId": "1",
"lastUpdated": "2021-10-26T15:48:17.111+09:00"
},
"active": true,
"name": [
{
"use": "official",
"family": "Donald",
"given": [
"Duck"
]
}
],
"gender": "male",
"managingOrganization": {
"reference": "Organization/1",
"display": "ACME Healthcare, Inc"
}
}
managingOrganization.reference
要素で指定された Organization リソースが自サーバに登録されていない場合はエラーを返却します。
- レスポンスボディ
400 Bad Request
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "fatal",
"code": "invalid",
"details": {
"text": "The referenced resource \"Organization/1\" does not exist."
},
"diagnostics": "The referenced resource \"Organization/1\" does not exist."
}
]
}
Bundle リソース
単一リソースと同様に、リファレンス要素が絶対参照であり、ベース URL が自サーバの URL の場合は相対化を行います。
また、リファレンス要素が相対参照であり、Bundle.entry.fullUrl
要素の値が絶対 URL でベース URL が外部サーバ URL の場合は絶対化を行います。
※ Bundle.type
が document
または message
の場合は、Bundle リソース内の参照整合性の検証を行います。(詳細はバリデーションに記載)
リファレンス要素 | Bundle.entry.fullUrl | 変換 | 参照整合性 の検証 |
---|---|---|---|
絶対参照(自サーバ) (例) http://localhost:8080/fructos/Organization/1 | - | 相対化 (例) Organization/1 | ○ |
絶対参照(外部サーバ) (例) http://example.org/fhir/Organization/1 | - | - | × |
相対参照(Bundle.entry.fullUrl:外部サーバ) (例) Organization/1 | 絶対 URL(外部サーバ) (例) http://example.org/fhir/Patient/1 | 絶対化 (例) http://example.org/fhir/Organization/1 | × |
相対参照(Bundle.entry.fullUrl:自サーバ) (例) Organization/1 | 絶対 URL(自サーバ) (例) http://localhost:8080/ fructos/Patient/1 | - | ○ |
相対参照(Bundle.entry.fullUrl:絶対 URL 以外) (例) Organization/1 | 絶対 URL 以外 (例) urn:uuid:61ebe359-bfdc-4613-8bf2-c5e300945f0a | - | × |