Skip to main content

FHIR サーバ:概要

多くの実装では、すぐに使用可能な FHIR サーバを使用できます。このサーバは、リソース・リポジトリを使用して、リソースをインターシステムズのデータベースに格納したり、このデータベースから取得します。この FHIR サーバは、相互運用プロダクションを使用することも、まったく新しいバックエンドを開発することもなく、カスタマイズできます。リソース・リポジトリを使用するサーバでサポートされる HL7® FHIR® 相互作用の詳細は、"サポートされる相互作用とオペレーション" を参照してください。

FHIR 要求は、サーバのインフラストラクチャに到達するまで、相互運用プロダクションを通じてルーティングできますが、これは必須ではありません。相互運用プロダクションを使用しない FHIR サーバの方が、はるかに高速になる可能性があります。

あまりよくあることではありませんが、完全にカスタムのバックエンドを持つ FHIR サーバを構築することもできます。この実装では、リソース・リポジトリで使用されるものと同じ内部アーキテクチャを活用しますが、独自の FHIR 処理ロジックを開発する必要があります。

ご使用のインターシステムズ製品に FHIR サーバをインストールするライセンスがない場合は、FHIR 相互運用アダプタを使用して、相互運用プロダクション経由で FHIR 要求を受信および処理できます。

アーキテクチャ

リソース・リポジトリを使用する FHIR サーバとカスタムのバックエンドを使用する FHIR サーバは、同じアーキテクチャを使用します。FHIR サーバを通じて FHIR 要求をトレースすると、このサーバのアーキテクチャに関する主要機能の概要を適切に理解することができます。最初に、FHIR 要求はサービスに到達する必要があります。サービスは、要求がサーバの FHIR メタデータ標準に適合していることを確認してから、要求の処理に適したコンポーネントに要求をルーティングします。FHIR 要求は、このサービスに 3 つの方法で到達できます。REST ハンドラから到達する方法、相互運用プロダクション経由で到達する方法、または ObjectScript FHIR クライアントから到達する方法です。このサービスは、相互運用プロダクションのビジネス・サービスとは無関係です。

サービスが要求をどのように処理するかは、要求のタイプによって異なります。

  • FHIR 相互作用Opens in a new tabに対応する HTTP メソッドとエンドポイントが要求に含まれる場合、サービスは、そのタイプの FHIR 相互作用を処理する Interactions クラスのメソッドに、その要求を転送します。例えば、read 相互作用が含まれる要求は、Interactions クラスの Read() メソッドに送信されます。この Interactions クラスは、InteractionsStrategy クラスを使用して FHIR 相互作用を実行し、FHIR サーバの全体的な目的に従って相互作用を処理します。

  • FHIR オペレーションOpens in a new tabの場合、サービスは、オペレーションを実行するために設計された特別なクラスに要求を転送します。リソース・リポジトリを使用する FHIR サーバでは、特定の FHIR オペレーションのサポートがすぐに利用可能です。

  • タイプが transaction または batchバンドルOpens in a new tabが要求に含まれる場合、サービスは、バンドルをアンパックして個々の HTTP オペレーションを実行する特別なクラスに要求を転送します。

FHIR サーバの内部アーキテクチャ

サービスの詳細

サービスは、1 つのエンドポイントに対して自身の 1 つのインスタンスのみをインスタンス化できるシングルトン・クラスです。このインスタンス化は、最初の FHIR 要求が REST ハンドラまたはビジネス・オペレーションによってサービスに転送されたときに実行されます。インスタンス化されると、サービスは、プロセスが終了するまで存在します。FHIR 要求をプログラムによって実行するサーバ・アプリケーションの場合、アプリは、最初の要求を送信する前に、HS.FHIRServer.Service.EnsureInstance()Opens in a new tab を呼び出してサービスを取得する必要があります。

ほとんどの場合、Service クラス (HS.FHIRServer.ServiceOpens in a new tab) は、サブクラスを作成することなく、エンドポイントの FHIR 標準に準拠して要求をルーティングする準備ができています。FHIR サーバの動作を指定するカスタム・ロジックは、サービスにではなく、Interactions サブクラスおよび InteractionsStrategy サブクラスに記述します。

エンドポイント向けの新しいサービスの作成やサービスの削除など、サービスを管理するメソッドは、HS.FHIRServer.API.RepoManagerOpens in a new tab のサブクラスに属しています。

InteractionsStrategy の詳細

InteractionsStrategy クラスは、FHIR サーバの全体的なストラテジを規定します。これは、FHIR サーバ・アプリケーションのバックエンドで、FHIR データの処理環境を作成および実装します。InteractionsStrategy のスーパークラスは、HS.FHIRServer.API.InteractionsStrategyOpens in a new tab です。

多くの場合、InteractionsStrategy は、FHIR サーバが FHIR リソースを保存および取得する方法の "ストレージ・ストラテジ" です。例えば、リソース・リポジトリは、FHIR データの保存と取得に使用されるリソースとインデックス・テーブルを作成する HS.FHIRServer.API.InteractionsStrategyOpens in a new tab のサブクラスによって実装されます。FHIR データを保存しないアプリケーションの場合、このストラテジにより、外部の FHIR サーバ、またはサーバの FHIR データを操作する他のカスタム・ロジックと通信する環境を設定できます。

InteractionsStrategy は、InteractionsStrategy を使用するサービスを管理する HS.FHIRServer.API.RepoManagerOpens in a new tab のサブクラスに関連付けられています。

Interactions クラスの詳細

InteractionsStrategy クラスはアプリケーションのバックエンドですが、Interactions クラスを使用して、サービスが受信する FHIR 相互作用を実際に実行します。このプロセス中に、Interactions クラスは、特に FHIR サーバ・ストラテジ全体に共通する構造とロジックのために、InteractionsStrategy クラスのメソッドを呼び出すことがよくあります。このような相互依存関係があるため、統合アプローチでは、Interactions クラスと InteractionsStrategy クラスは同時にサブクラスが作成されます。Interactions のスーパークラスは、HS.FHIRServer.API.InteractionsOpens in a new tab です。

FHIR 要求を処理する際にサービスによって呼び出される Interactions クラスのメソッドは、サーバ側 ObjectScript アプリケーションから直接呼び出すこともできます。例えば、サーバ側アプリケーションから、POST 要求をサービスに送信する代わりに、Interactions クラスの Add() メソッドを呼び出すことができます。サービスをバイパスする場合、サーバ・アプリケーションは、サービスのメタデータによって FHIR サーバに設定された制約をバイパスできます。例えば、サービスを経由する要求に対してエンドポイントが読み取り専用であっても、サーバ・アプリケーションで FHIR サーバのストレージに入力することができます。

また、Interactions クラスは、FHIR オペレーションの実行、バンドルの処理、および FHIR データの検証のためにサービスで使用される特殊クラスの追跡も行います。サービスは、アクションが必要になると、Interactions オブジェクトからこれらのクラスの名前を取得します。

リソース・リポジトリ

リソース・リポジトリは、FHIR サーバの既定のストレージ・ストラテジで、他の開発タスクなしに、完全に機能する FHIR サーバをインストールすることができます。リソース・リポジトリは、サーバが受信した FHIR データを自動的に、FHIR データの JSON データ構造をカプセル化したダイナミック・オブジェクトとして保存します。リソース・リポジトリを使用する FHIR サーバをインストールするには、インストール時に Interactions Strategy クラスとして HS.FHIRServer.Storage.JsonAdvSQL.InteractionsStrategyOpens in a new tab を選択します。

Note:

2024.1 より前のバージョンでは、リソース・リポジトリ・アーキテクチャは HS.FHIRServer.Storage.Json パッケージのクラスを使用して実装されていました。これらの従来のアーキテクチャ・クラスは、このバージョンでも引き続きサポートされます。ただし、このドキュメントで説明する現在のクラスと比べ、提供される機能セットが限定されます。

既存のリソース・リポジトリを含むインスタンスを 2024.1 より前のバージョンからこのバージョンにアップグレードした場合、サポートされる機能の比較、および従来のクラスから現在のクラスにリソース・リポジトリをアップグレードする手順については、"JSON Advanced SQL への従来のリポジトリのアップグレード" を参照してください。

リソース・リポジトリを使用する FHIR サーバで使用可能な FHIR の相互作用とオペレーションのリストは、"サポートされる相互作用とオペレーション" を参照してください。

リソース・リポジトリは、以下のアーキテクチャ・クラスで構成されます。

アーキテクチャ・コンポーネント リソース・リポジトリ・クラス
Interactions HS.FHIRServer.Storage.JsonAdvSQL.InteractionsOpens in a new tab
InteractionsStrategy HS.FHIRServer.Storage.JsonAdvSQL.InteractionsStrategyOpens in a new tab
RepoManager HS.FHIRServer.Storage.JsonAdvSQL.RepoManagerOpens in a new tab

リソース・リポジトリのサブクラスを作成して、FHIR サーバをカスタマイズできます。詳細は、"FHIR サーバのカスタマイズ" を参照してください。

FeedbackOpens in a new tab