2019年8月5日 星期一

HL7 FHIR 核心觀念 - RESTful

HL7 FHIR另一個核心觀念是RESTful。什麼是RESTful?他是應用REST架構於Web Service上。那REST(Representational State Transfer)又是什麼?這又得先提到什麼是HTTP(s)通訊協定。(再講,又得從TCP/IP開始,然後又是ISO的OSI,IT人的悲歌)
為避免困擾,本篇只講FHIR所提供的內容為主。
==========
首先一些背景知識還是得知道:
1. 依據 REST Maturity model,FHIR僅支援到Level 2。
2. HTTP/1.1定義了八種方法:GETHEAD、POSTPUTDELETETRACE、OPTIONS、CONNECT。而RESTful取用其中四個方法(紅色字)來與CRUD作對應。
3. 但是FHIR又根據這四個法略加擴充機制。請參考下表


例如說Get他是對應到R(read)的部分。Get也不是這麼簡單,你是要讀一筆,還是要讀一整批。那要不要下條件呢?
再來,FHIR有支援版控,那又要如何處理之。
把這張表的每一個方法搞清楚了,也許就大概略知一二了。
雖然方法定義不同,但可以歸納成一個式子:
 VERB [base]/[type]/[id] {?_format=[mime-type]}
  1. VERB就是只上表中的某一個方法。
  2. []是必要;{}是可選。
  3. base是Server的路徑。大概是這樣子。server可能包含Domain Name,也許還會有port的資訊。path就得看實作情境了。有些可能會在依據某些分類法則,例如namespace,或者project。
  4. http{s}://server{/path}
  5. type是指資源。
  6. id是叫Logic Id,他是由FHIR Server所給予的。當你新增一筆Resource案例到Server時,FHIR Server會給一個ID,後續要讀取這筆Resource案例,就要靠這個ID。記得他可不是資料庫的資料表中所定義的ID。
  7. id只會給一次,當有內容更新時,會影響的是vid。當我們要讀取一筆Resource案例的歷史資料時,整個語法公式就變成下列:
  8. GET [base]/[type]/[id]/_history/[vid] {?_format=[mime-type]}
  9. mime-type是要求Resource案例的格式。目前FHIR標準支援三種。
    1. XML: application/fhir+xml
    2. JSON: application/fhir+json
    3. RDF: application/fhir+turtle (only the Turtle format is supported)
這邊提到的只是概略描述,許多細節還是得深入文件研究。還有一點得注意,這邊提到的都是FHIR的標準定義,到了實作面時可能會依據你採用的程式語言,或者實作架構之不同而有所改變。

沒有留言:

張貼留言