目前Client端程式還沒開發,得找一些工具來進行測試。這邊建議:
兩個都是免費,這邊使用Postman。本篇重點是對FHIR Server作存取測試,請自行深入研究Postman。這兒,假設您已經安裝妥當(需要註冊)。開啟正常,應得下列畫面。
- 這兒就是verb,你想對Server操弄的方法。若不熟,那就得先懂Restful。(以後再補說明)
- 這是URI。還記得還記得Server的Endpoint吧!http://localhost:4080/。後接Resource與ID或參數,來向Server進行CRUD的功能。若不熟Resource,那就得先懂HL7 FHIR對Resource的定義。(以後也會補說明)
- 正式發送請求。
- HTTP訊息的檔頭,例如Content-Type的轉換JSON或XML。還好,可設定不用記。
- 這個是訊息主體,尤其是POST與PUT的時候,需要夾帶資源內容,就是放在這兒。
==========
1. 看看系統支援哪些資源以及方法、參數
- 是查詢,所以用Get。使用metadata這個資源,可取出FHIR Server支援狀況。
- 得到Server回應結果。
2. 有支援Organization資源嗎?
就實作情境來說,Client端要向FHIR Server進行存取時,得問問人家有沒有支援。
目前還沒開發Client,先用前面的回應結果來查詢。
- 先選查詢按鈕。
- 輸入查詢內容。要找Organization這個Resource,故,查詢內容輸入"type": "organization"。(注意,我們回傳格式是JSON)
這下子我們可以安心來查詢了。
3. 目前Server有哪些Organization資源
- 輸入URI。別忘了Endpoint與資源。目前是查詢所有Organization,不接任何參數。
- 回傳結果。喔,目前筆數為0。
4. 新增一筆Organization
沒有Client端程式,也不懂FHIR Resource,怎麼辦。沒關係,從官網複製一份就好。(http://www.hl7.org/fhir/organization-examples.html)
這邊就挑HL7 itself。選XML或JSON皆可。但傳送時,要先宣告。這邊採用JSON。
- 因為要新增,所以verb選POST。
- 輸入URI。應該看懂格式了吧。
- 因為是POST,訊息要帶內容,所以,切到Body。
- 選擇raw,然後下面方框貼入剛剛複製的內容。
- 我們選擇的是JSON格式。
- 因為是POST,所以,原本訊息的ID欄位要刪除。若堅持要用原本的ID,那verb要改成PUT。
點選Send按鈕後,看看伺服器的回應。
- 系統回傳給我們這筆新增的Organization資源。此時,id已經有資料了。這個格式是GUID(8-4-4-4-8)。有些Server會給流水號ID(HAPI FHIR Test Server)。就實作交換的角度,前者才是世界唯一,後者只能是此伺服器唯一。
請記得這個ID,等會我們新增一個病人是會用到。
5. 新增一筆病患
當然是從官網的Patient資源取得範例資料。(不贅述了)
- 注意URI的資源已經改成Patient。其他的就一樣了。
- Body部分有兩點:(1) ID要砍掉;(2) Organization的參照連結的ID要改成,剛剛我們新增所得到的ID。
看看系統回傳什麼?
恭喜!成功新增了。
一樣,記住這個ID。
6. 想改病患的姓名
如果我們想要改Resource內容呢?就得準備兩個資料:(1) 要改哪一筆,就是透過ID;(2)新的內容,就是透過Body。
- verb改成PUT。
- URI除原本的資源路徑外,後面再接要修改對象的ID。(記得,實際情況是電腦處理,不是人)
- 要修改的內容。(注意,並不需要帶其他資料,但整體格式要對)
來看看Server給什麼回應。
Server順利回傳我們修改過的資源內容。
7. 真的有修改到嗎?
想要驗證是否正確,那就是用GET,但有指定ID。
- 用GET。
- 修改URI的內容。
- 真的是修改後的版本。
8. 那之前的還在嗎?
這是版控的問題。HL7 FHIR有內建此機制。詳細語法(history):
GET [base]/[type]/[id]/_history{?[parameters]&_format=[mime-type]} GET [base]/[type]/_history{?[parameters]&_format=[mime-type]} GET [base]/_history{?[parameters]&_format=[mime-type]}
那如何操作呢?
- 因為是查詢,用GET。
- URI是使用Patient這個資源的特定ID,詢問其歷史資料。注意,_history是機制,不是參數,前無須打?。
- 查詢結果,Server用Bundle這個資源打包。之前做了兩次異動(1次新增,1次更新),固有兩筆。回應訊息中,也包含了完整url,系統實作時簡單多了。
- 如果真的要調回特定的那個版次的資料,那又得就得加入versionId的資料了。
9. 調回特定版次
想要調回特定版次的資料,其語法(vread)為:
GET [base]/[type]/[id]/_history/[vid] {?_format=[mime-type]}
所以,若要調回第一次新增時的版次。得在_history後接vid。
- 在_history之後接vid。(當然是參考上述步驟所傳回的資料,否則,誰記得了這一大串數字呢?)
- 姓名內容是當初新增時範例資料內容。
=========
後記
一路走到這,應該已經大致掌握玩弄HL7 FHIR的能力了。大部分的資源玩法都一樣。
當然,一個好的伺服器也很重要,像這個FHIR Server有支援到STU 3。
可是,這個伺服器畢竟是別人設計的,為什麼不自己設計一個。
這類型的FHIR Server是屬於general purpose。在我的認知與計畫,是要發展一套Profile-Base的FHIR Server。努力,再努力。只是希望有更多資源投入。
總之,下階段先搞定Client端的應用程式。也是一樣,玩弄架構搞定,所有的資源都一樣。
沒有留言:
張貼留言