Skip to main content

FHIR 要求と FHIR 応答

このトピックでは、FHIR サーバおよび相互運用プロダクション向け FHIR アダプタで使用される要求と応答について説明します。

インターシステムズの FHIR クライアントで使用される要求と応答の詳細は、"FHIR クライアント" を参照してください。

プロダクション以外の要求/応答

相互運用プロダクションを使用しない FHIR サーバの場合は、以下のようになります。

FHIR ペイロードへのアクセス

既定では、REST ハンドラで FHIR 要求を受信すると、FHIR ペイロードが Request オブジェクト (HS.FHIRServer.API.Data.RequestOpens in a new tab) の Json プロパティに保存されます。これにより、JSON 構造がダイナミック・オブジェクトに自動的に取り込まれます。XML が含まれる FHIR 要求は、JSON に変換された後に、Json プロパティのダイナミック・オブジェクトとして表されます。FHIR サーバからの応答 (HS.FHIRServer.API.Data.ResponseOpens in a new tab) にも FHIR データの Json プロパティは含まれます。

FHIR データを操作するには、まず、要求または応答の Json プロパティにアクセスします。FHIR ペイロードを入手したら、それをダイナミック・オブジェクトとして操作できます。例については、"FHIR データ" を参照してください。

相互運用の要求/応答

相互運用プロダクションを活用する FHIR サーバ、相互運用プロダクション向け FHIR アダプタ、または FHIR クライアントの場合は、以下のようになります。

これらのクラスには、FHIR ペイロードを指す QuickStreamId プロパティが含まれます。

FHIR ペイロードへのアクセス

FHIR の実装で相互運用プロダクションが使用されている場合は、プロダクションが使用されていない実装とは異なり、メッセージ・オブジェクトの FHIR ペイロードにアクセスします。プロダクションベースの実装では、要求および応答メッセージ (HS.FHIRServer.Interop.RequestOpens in a new tab および HS.FHIRServer.Interop.ResponseOpens in a new tab) には、FHIR ペイロードを含む QuickStream オブジェクトへのアクセスに使用される QuickStreamId が含まれています。相互運用要求メッセージには、HS.FHIRServer.API.Data.RequestOpens in a new tab タイプの Request プロパティも含まれますが、この Request プロパティを FHIR ペイロードへのアクセスに使用することはできません。これは、その Json プロパティが一時的であるためです (相互運用応答についても、これは当てはまります)。その結果、FHIR ペイロードにアクセスする必要のあるプロダクションのビジネス・ホストは、QuickStreamID を使用して、ペイロードを取得する必要があります。

ペイロードが JSON 形式である場合、ビジネス・ホストは、ペイロードを変更するため、そのペイロードにアクセスしてダイナミック・オブジェクトに変換できます。例えば、BPL ビジネス・プロセスでは、以下のコードを使用して、JSON 形式の要求メッセージの FHIR ペイロードにアクセスし、変更することができます。

 //Identify payload as a Patient resource and convert to dynamic object
 if ((request.Request.RequestMethod="POST") & (request.Request.RequestPath="Patient"))
 {
   set stream = ##class(HS.SDA3.QuickStream).%OpenId(request.QuickStreamId)
   set myPatient = ##class(%DynamicObject).%FromJSON(stream)

   // Modify Patient resource
   do myPatient.%Set("active", 0, "boolean")

   //Update payload with modified Patient resource
   do myPatient.%ToJSON(stream)
   do stream.%Save()
 }

FHIR データをダイナミック・オブジェクトとして操作するその他の例は、"FHIR データ" を参照してください。

ObjectScript アプリケーション

ObjectScript アプリケーションがリソース・リポジトリからリソースを取得する必要がある場合は、プロダクション以外の要求オブジェクト (HS.FHIRServer.API.Data.RequestOpens in a new tab) を構築してから、それをエンドポイントのサービスにディスパッチできます。アプリケーションでデータを取得する場合は、データはプロダクション以外の応答オブジェクト (HS.FHIRServer.API.Data.ResponseOpens in a new tab) として返されます。詳細は、"DispatchRequest の直接呼び出し" を参照してください。

クライアントに見える URL の設定

場合によっては (特に要求がプロキシ経由で FHIR エンドポイントに転送される場合)、FHIR サーバが要求を受信した URL が、元々 REST クライアントによって要求された URL と異なることがあります。

そのような場合、FHIR サーバの REST ハンドラは、要求オブジェクトの FORWARDED または X-FORWARDED HTTP ヘッダのコンテンツから、クライアントに見えるベース URL を判断します。このロジックは、HS.FHIRServer.Util.BaseURLOpens in a new tab クラスの GetBaseURL()Opens in a new tab クラス・メソッドにより実装されます。

FHIR サーバでクライアントに見える URL を異なるロジックに従って構築する必要がある場合は、HS.Local.FHIRServer.Util.BaseURLOpens in a new tab クラスでカスタムの GetBaseURL() を定義します。このクラスに定義されたメソッドは、元のメソッドをオーバーライドします。

FeedbackOpens in a new tab