工研院生醫所 李建儒經理 工作坊摘錄
整個 SMART 的精神,其實就是透過 OAuth 跟 OpenID 的概念,安全地把 FHIR Server 的資料抓出來。因此只要透過 SMART App(SMART on FHIR 官方提供的 Library),執行完相關認證機制,然後把資料從 FHIR 端抓出來,接下來就可以銜接你想開發的應用,我們也會按照應用進行相關驗證。我們就來開始今天下午的工作坊課程 ~
SMART on FHIR 實作課程:
- 課程目標
- 實作帶領學員完成一個屬於自己的 SMART App(JavaScript、Python 兩種範例)。
- 核心觀念:用 OAuth + OpenID 安全存取 FHIR Server 資料,後續可銜接 AI、規則分析、統計。
- 課程流程 / 進度
- Part 1:如何寫 SMART App(架構+官方 Library 介紹,JS/Python 實作)。
- Part 2:SMART 平台與啟動機制、測試平台說明。
- 中場休息:準備手作所需環境。
- Part 3:動手寫出自己的 SMART App;課後繳交成果供助教檢視。
- 官方學習資源
- SMART 官方文件與 Tutorials:Web App 入門、Server 端註冊、啟動機制(HL7 專頁)。
- 多語言 Library:JavaScript、Python、iOS(Swift/Obj-C)等皆提供 FHIR 連線套件。
整個課程規劃,由李建璋處長所規劃,次世代計畫團隊來執行。採用 SMART on FHIR 官方提供的開源套件,可以把這套件部署到你的電腦上,或醫院的平台上;也可以做 SMART App 的 launch 啟動與整個驗證流程。SMART on FHIR 官方有非常豐富的教材,從最基本的教學課程,一直到如何寫一個 SMART App,或者想要在國外的 App Store、其他電子病歷系統上架,都有很詳細的教學。大家有空可以上去研讀。工作坊會教大家用 JavaScript 與 Python 來寫一個 SMART App 的架構,以及介紹 SMART 平台,包含啟動機制,以及我們提供的測試平台等,接著會帶大家寫一個屬於自己的 SMART App,可隨時請助教、工作人員協助。
SMART 的開放性標準與使用方式,目標是打造「可替代、可重複使用」的 App 開發。若要用一句話介紹 SMART on FHIR:在 FHIR Data 的基礎上,加入「安全的資料認證機制」(OAuth 與 OpenID),讓應用程式能安全取用醫院的病患資料。早上看到不少應用,基本上都是在應用前端。今天要在 EHR 上註冊一個 App,會透過 OAuth 認證機制取得 token,需要醫院提供對應的 Client ID,讓 App 完成註冊流程,成為被認可的 App,後續就能抓 FHIR Data,做各種應用與輸出。

如果你直接到 SMART Gallery 官方,也列出除了 SMART 外,像 Epic、Cerner 也有自己的市集;若有興趣可以去看已上架的醫療程式。不過像 Epic 或 Cerner 屬於需註冊的系統,你要取得它的 Client ID 才能上架,嚴謹度比 SMART 高。

目前大多是把 SMART App 用在 EMR 裡,但還有更大的市場是面向使用者(病患端)。所以你在開發時會先決定:這個 App 是給醫療人員在醫院 EMR 使用,還是給病患本人使用(例如安裝在手機上,讀取或更新自己的資料)。SMART 官方提供很豐富的 Library,讓你在不同語言環境借接 SMART on FHIR 的標準開發,包含 JavaScript、Python,甚至 Apple 平台也有相應 Library。所以你若想在 Apple 上開發 SMART on FHIR 應用,也可直接用他們提供的 FHIR 連線 Library 做後續認證與 FHIR Data 擷取。
Library 的用法概念上很一致:在 App 端(client),FHIR 連線 Library 已內建 OpenID/OAuth 相關 API。你只要選擇開發平台,就能執行 OpenID/OAuth 流程;等一下會有簡單的程式示範。

第一步、第二步完成 Library 選擇與設定後,第三步就是到測試 Sandbox 驗證資料。SMART 提供的測試 Sandbox 不需要實際醫院認證。若你的 App 要在醫院 EMR 使用,就要到醫院系統註冊,取得 Client ID,並把它寫進 launch.html;若只是測試程式,SMART 的 Sandbox 提供「純淨而豐富」的資料。覺得不夠,也可以用 Synthea 這套合成病例開源工具,依族群與病例特性產生資料,上傳到測試平台進行測試。Epic、Cerner 等也有類似測試環境。
開發好 App 後,就能透過 Sandbox 或實際 EMR 啟動。所謂「啟動」(launch)的用意,是幫你執行 OAuth 認證、token 交換等;流程完成後,才會把 HTTP 導到你實際 App 的網址。等一下也會說明細節。SMART 官方網站有非常豐富的學習資源;身為開發者,你可以從「如何開發 SMART App」的文件進去,看 FHIR、CDS、Data Access(FHIR REST/IG/FHIRPath)等;關於 SMART App 啟動機制,HL7 有專頁說明。Tutorials 裡有「如何開始一個 Web App 開發」;我們待會的第一個練習就走這個簡單案例。也有 Server 端的教學,說明在 EMR 上如何註冊、取得 Client ID,並把它寫進 launch.html,一步步完成認證。
在核心「認證流程」上,EHR 點開一個 SMART App 後,會先做 launch:EHR 把已連接的 FHIR Server 位址提供給 App(讓 App 知道要連哪個 FHIR Server)。有位址還不夠,接著要認證,所以會進 OAuth 授權流程:把使用者導到登入頁,輸入帳密後授權 App 存取 FHIR 資料。SMART 2.0 之後,對「可存取哪些 FHIR Resource」的 scope 管控更嚴格,scope 也會寫在 launch.html。授權完成後,回到 App,取得 authorization code,接著做 token 交換,FHIR Server 確認無誤後,App 的 API 就能透過 FHIR API 存取資料,開始後端的 AI、統計分析。看起來很多步,但等一下寫 App 時會發現:呼叫幾個標準 API 就完成 token 流程,不用寫很複雜的程式;幾分鐘內可完成認證開發。
透過 SMART on FHIR,我們正在為下一代健康創新奠定基礎。我們期待大家今天在工作坊中,能順利完成啟動授權流程,並成功擷取如 Patient、MedicationRequest 或 Observation 等資源,打造出專屬於你的 SMART App。