カスタムの FHIR オペレーション
FHIR® サーバは、RESTful アプローチではなく RPC に似たアプローチを使用して、FHIR クライアントからの要求に基づいて特殊な機能を実行する FHIR オペレーションOpens in a new tabをサポートしています。これらは、$everything のような標準の FHIR オペレーションである場合も、カスタム・オペレーションである場合もあります。リソース・リポジトリを使用または拡張する FHIR サーバでは、既に特定の標準の FHIR オペレーションをサポートしています (完全なリストは、"サポートされる相互作用とオペレーション" を参照してください)。
以下に、FHIR オペレーションを FHIR サーバに追加するプロセスの概要を示します。
-
FHIR サーバのアーキテクチャのサブクラスを作成します。詳細は、"インストール前のサブクラスの作成" を参照してください。
-
HS.FHIRServer.API.OperationHandler のサブクラスを作成します。リソース・リポジトリを使用している場合は、HS.FHIRServer.API.OperationHandler ではなく HS.FHIRServer.Storage.BuiltInOperations サブクラスを作成して、$everything などの既定のオペレーションが失われないようにします。ベスト・プラクティスとして、オペレーションごとに別個のサブクラスを作成してから、そのすべてを継承するマスタ・クラスを作成することをお勧めします。
-
Interactions サブクラスで、OperationHandlerClass パラメータの値をオーバーライドし、作成したオペレーション・サブクラスのクラス名にします。
-
オペレーション・ハンドラ・サブクラスの各オペレーションのメソッドを記述します。
-
CapabilityStatement リソースにオペレーションを追加します。
以下のセクションでは、プロセスの最後の 2 つの手順を詳細に説明します。
カスタム・オペレーションのメソッドの記述
FHIR サーバでサポートされるオペレーションは、オペレーション・ハンドラ・サブクラスのメソッドに直接対応します。これらのメソッドの名前は、以下の構文に適合する必要があります。
FHIRScopeOpOperationName
この構文内の変数は以下のとおりです。
以下の表に、メソッド名と FHIR クライアントによって呼び出されるオペレーションの相関関係の例を示します。
メソッド名 |
REST クライアントによるオペレーションの呼び出し |
FHIRSystemOpMyoperation |
http://fhirserver.org/fhir/$myoperation |
FHIRTypeOpValidate |
http://fhirserver.org/fhir/Observation/$validate |
FHIRInstanceOpEverything |
http://fhirserver.org/fhir/Patient/1/$everything |
オペレーションにハイフン (-) が含まれる場合は、メソッド名からハイフンを削除してください。例えば、システム全体のオペレーションが $my-operation である場合、メソッドを FHIRSystemOPMyOperation という名前にします。
以下に $everything のメソッド・シグニチャの例を示します。
ClassMethod FHIRInstanceOpEverything(pService As HS.FHIRServer.API.Service,
pRequest As HS.FHIRServer.API.Data.Request,
pResponse As HS.FHIRServer.API.Data.Response)
機能宣言書へのオペレーションの追加
FHIR サーバの機能宣言書には、サーバがサポートするすべてのオペレーションが含まれる必要があります。機能宣言書を新しいオペレーションで更新するには、次の 2 つの選択肢があります。
-
機能宣言書にオペレーションを手動で追加します。このアプローチには欠点が 1 つあり、新しい検索パラメータを追加したときなど、場合によっては機能宣言書が再生成されるため、手動による変更が再生成時に失われます。このプロセスの詳細は、"機能宣言書の手動更新" を参照してください。
-
オペレーション・ハンドラ・サブクラスの AddSupportedOperations メソッドを変更して、機能宣言書の再生成時に、新しいオペレーションがその機能宣言書に自動的に追加されるようにします。このアプローチの詳細は、以下のセクションを参照してください。
以下の 2 段階の手順を使用して、新しいオペレーションを機能宣言書に自動的に追加できます。
-
オペレーションを、オペレーション・ハンドラ・サブクラスの AddSupportedOperations メソッドに追加します。コマンド行ユーティリティでサーバの機能宣言書を生成した場合、サポートされるオペレーションはこのメソッドから取得されます。例えば、$everything オペレーションをサポートするサーバのオペレーション処理クラスに、以下のようなメソッドが含まれます。
ClassMethod AddSupportedOperations(pMap As %DynamicObject)
{
Do pMap.%Set("everything","http://hl7.org/fhir/OperationDefinition/patient-everything")
}
オペレーション処理クラスのスーパークラスに既に何らかのオペレーションが含まれる場合は、必ず、サブクラスの AddSupportedOperations 内でそのスーパークラスの AddSupportedOperations メソッドを呼び出してください。例えば、オペレーション処理サブクラスのメソッドは以下のようになる場合があります。
ClassMethod AddSupportedOperations(pMap As %DynamicObject)
{
Do ##class(HS.FHIRServer.MySuperclass.Validate).AddSupportedOperations(pMap)
Do pMap.%Set("everything", "http://hl7.org/fhir/OperationDefinition/patient-everything")
}
各オペレーションのサブクラスと、そのすべてを継承するマスタ・クラスを作成している場合は、そのマスタ・クラスが、各オペレーションのサブクラスの AddSupportedOperations メソッドを呼び出すようにします。
-
コマンド行ユーティリティを使用して、機能宣言書を再生成します。
-
InterSystems ターミナルから、FHIR サーバのネームスペースに変更します。以下に例を示します。
set $namespace = "MyFHIRNamespace"
-
インストールおよび構成ユーティリティを実行します。
do ##class(HS.FHIRServer.ConsoleSetup).Setup()
-
オプション Update the CapabilityStatement Resource を選択します。
-
構成するエンドポイントを選択します。
-
選択内容を確認します。