HAPI FHIR Interceptor
主要參考資料:Interceptors: Overview
Interceptor概述
- HAPI FHIR擴充(客製化)的一個主要方法,當思考「我如何讓 HAPI FHIR 執行 X」時,答案通常是建立Interceptor。
- Interceptor中文直譯為"攔截器",顧名思義,就是在FHIR 伺服器處理應用程式需求的pipeline過程中攔截相關訊息並提供客製化機制,達到某種特殊用途的效果。例如可針對特定IP攔截或放行、紀錄log、增加驗證機制等。
- Interceptor名詞介紹:
- Interceptor:Java Class,擁有一個以上的Hook Method,可以使用 maker annotation @interceptor(非必要條件)。
- Hook:單一的Interceptor的method,當HAPI FHIR特定情況發生時所對應的回應,必須使用 @Hook
- Pointcut:HAPI FHIR處理pipeline中的一個攔截點, 每一個Hook Method必須宣告所對應的攔截點。
- Hook Params:每一個Pointcut所定義之參數列表。可傳送給該Pointcut所對應之Hook Method。
Pointcut說明
Pointcut可區分成三個類型:Client、Plain Server與JPA Server。使用者可依據實際需要,選擇適當的Piontcut,開發對應的Hook Method已達到預期的效果。
- Client Pointcuts

- Plain Server Pointcuts

- JPA Server Pointcut

Interceptor客製流程
- 1 建立Interceptor class
- Class至少包含一個標記為@Hook的method
- Hook method必須對應到某一個pointcut
- Hook method必須宣告為public
以下是一個簡單的例子,使用SERVER_INCOMING_REQUEST_PRE_HANDLED紀錄呼叫端的Url與SERVER_OUTGOING_RESPONSE紀錄response結果。