管理者マニュアル
マルチテナントの利用が必要な場合は、こちらからお問い合わせください。
テナントの管理方法
テナント情報のデータ形式
FRUCtoSではテナントをOrganizationリソースで管理します。
| プロパティ | 項目 | 必須 | 備考 |
|---|---|---|---|
| identifier system: http://multi-tenant.fructos.jp/organization/partition | パーティション情報 | × | ユーザーによる指定可 未指定ならFRUCtoS側で設定 |
| identifier system: http://multi-tenant.fructos.jp/organization/schema | スキーマ情報 | × | ユーザーによる指定不可 FRUCtoS側で設定 |
| name | 施設名 | 〇 | |
| address | 住所 | × | |
| telecom | 連絡先 | × | |
| contact.name | 担当者名 | × | |
| contact.telecom | 担当者の連絡先 | × |
現在使用中のパーティションを新たなテナントに重複して割り当ててはいけません。
複数テナント間でデータが共有されます。
新規テナント作成の運用手順
1.テナント情報の登録
テナント情報を設定したOrganizationリソースを登録してください。
レスポンスボディに新規作成したテナントのパーティション情報が含まれていますので控えてください。
identifierプロパティの"system": "http://multi-tenant.fructos.jp/organization/partition"に対応するvalueプロパティです。
そのパーティション情報を利用して生成したテナントにリクエストを投げることができます。
下の例の場合partitionはcm03fpt9500011sog57y326になります。
リクエスト
POST [base]/admin/Organization/
{
"resourceType": "Organization",
"identifier": [],
"name": "sample tenant"
}
レスポンス(HTTP status: 201 Created)
{
"resourceType": "Organization",
"id": "1",
"meta": {
"versionId": "1",
"lastUpdated": "2024-01-01T00:00:00.000+09:00"
},
"identifier": [
{
"system": "http://multi-tenant.fructos.jp/organization/schema",
"value": "cm03fpt9400001sog57ldyn"
},
{
"system": "http://multi-tenant.fructos.jp/organization/partition",
"value": "cm03fpt9500011sog57y326" // テナントに割り当てられたpartition
}
],
"name": "sample tenant"
}
2.ユーザーへの通知
テナント作成後は発行されたパーティション情報をユーザーにお知らせしてください。 そのパーティション情報を利用してユーザーは作成したテナントにリクエストを投げることができます。 URLのフォーマットは以下の通りです。
[base]/[partition]/[type]/[id]
パーティションとエラー応答
マルチテナンシーが有効な構成で、サーバが認識していないパーティション(例: 一度も登録していない値、誤入力、テナント削除後)を URL に含めて [base]/[partition]/... にアクセスした場合、HTTP 404 Not Found を返します。本文は FHIR の OperationOutcome で、次のような例になります(issue.code は not-found、details.text および diagnostics に Invalid partition. が含まれることがあります。内部ではエラーコード R038、解説として「不正なパーティションです。」に相当します)。
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "fatal",
"code": "not-found",
"details": {
"text": "Invalid partition."
},
"diagnostics": "Invalid partition."
}
]
}
マ ルチテナンシーが無効な構成では、URL の先頭にテナント用のパスを付けてリソースにアクセスした場合、HTTP 400 Bad Request を返します。OperationOutcome に「マルチテナンシー機能が無効なため、テナント識別子を含むURLは使用できません。」等の文言が含まれることがあります。
実装上、URL にパーティションを含めないリクエスト(例: [base]/Patient)は公開(デフォルト)スキーマに解決されます。マルチテナンシー版では施設ごとのデータを分離するため、通常は [base]/[partition]/... を用いる運用を前提にしてください。
登録済みのテナント情報の確認
READ, SEARCHインタラクションを利用して登録済みのテナント情報を確認できます。
リクエスト
GET [base]/admin/Organization/1
レスポンス(HTTP status: 200 OK)
{
"resourceType": "Organization",
"id": "1",
"meta": {
"versionId": "1",
"lastUpdated": "2024-01-01T00:00:00.000+09:00"
},
"identifier": [
{
"system": "http://multi-tenant.fructos.jp/organization/schema",
"value": "cm03fpt9400001sog57ldyn"
},
{
"system": "http://multi-tenant.fructos.jp/organization/partition",
"value": "cm03fpt9500011sog57y326"
}
],
"name": "sample tenant"
}
リクエスト
GET [base]/admin/Organization/
レスポンス(HTTP status: 200 OK)
{
"resourceType": "Bundle",
"id": "72b9d451-28d2-4354-9945-bfd42835d9a3",
"meta": {
"lastUpdated": "2024-01-01T00:00:00.000+09:00"
},
"type": "searchset",
"total": 1,
"link": [
{
"relation": "self",
"url": "http://localhost:8099/fructos/admin/Organization/"
}
],
"entry": [
{
"fullUrl": "http://localhost:8099/fructos/admin/Organization/1",
"resource": {
"resourceType": "Organization",
"id": "1",
"meta": {
"versionId": "1",
"lastUpdated": "2024-01-01T00:00:00.000+09:00"
},
"identifier": [
{
"system": "http://multi-tenant.fructos.jp/organization/schema",
"value": "cm03fpt9400001sog57ldyn"
},
{
"system": "http://multi-tenant.fructos.jp/organization/partition",
"value": "cm03fpt9500011sog57y326"
}
],
"name": "sample tenant"
},
"search": {
"mode": "match"
}
}
]
}
登録済みテナント情報の更新
登録済みテナント情報の更新はUPDATEインタラクションを利用して行います。
partition・schema情報を更新することはできません。
リクエスト
PUT [base]/admin/Organization/1
{
"resourceType": "Organization",
"id": "1",
"meta": {
"versionId": "1"
},
"identifier": [
{
"system": "http://multi-tenant.fructos.jp/organization/schema",
"value": "cm03fpt9400001sog57ldyn"
},
{
"system": "http://multi-tenant.fructos.jp/organization/partition",
"value": "cm03fpt9500011sog57y326"
}
],
"name": "rename sample tenant"
}
レスポンス(HTTP status: 200 OK)
{
"resourceType": "Organization",
"id": "1",
"meta": {
"versionId": "2",
"lastUpdated": "2024-08-21T15:50:08.327+09:00"
},
"identifier": [
{
"system": "http://multi-tenant.fructos.jp/organization/schema",
"value": "cm03fpt9400001sog57ldyn"
},
{
"system": "http://multi-tenant.fructos.jp/organization/partition",
"value": "cm03fpt9500011sog57y326"
}
],
"name": "rename sample tenant"
}
登録済みテナント情報の削除
登録済みテナント情報の削除は$physical-deleteオペレーションを利用して行います。 Organizationリソースは物理削除され、対応するテナントへのリクエストも受け付けなくなります。
テナント情報の削除を行うと、そのテナントのデータはすべて削除されます。 必要であればダンプツールによりデータをダンプのうえ削除を実行してください。
リクエスト
GET [base]/admin/Organization/1/$physical-delete
レスポンス(HTTP status: 200 OK)
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "information",
"code": "informational",
"details": {
"text": "Designated resource has been successfully physically deleted."
},
"diagnostics": "Designated resource has been successfully physically deleted."
}
]
}
削除後、当該パーティションで FHIR リソースにアクセスした場合の例です。
GET [base]/cm03fpt9500011sog57y326/Patient/1
HTTP 404 Not Found。本文は パーティションとエラー応答 に示した OperationOutcome と同様です(未登録パーティションへのアクセスと同じ扱いです)。