iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
自我挑戰組

30天FUME TO FHIR轉換實戰 - 從入門到燃燒殆盡系列 第 10

[FUME TO FHIR] 10 RESTFUL API,PostMan基本使用

  • 分享至 

  • xImage
  •  

IV.後端基礎操作

10 FHIR Search

https://www.hl7.org/fhir/search.html

今天的部分滿重要的,講FHIR的search方法如何使用,有哪些東西可以用

因為這個文件的內容範圍非常大,不可能在一篇之內全部講完,細節請自行點進去看。

這個文件其實大致上就是說明使用者該如何透過RESTful API跟FHIR Server溝通的方式,
也可以說是一個比較粗略的FHIR API文件,

因為FHIR本身的結構設計,FHIR Server可以視為是一個儲存FHIR文件的資料庫,自然需要有方法能夠將儲存於內部的資料提取出來,

除了直接存取底層的SQL資料庫外,在正常的Client與Server關係間,能夠使用的大約也就是API了,

結合昨天所提到的Postman,看完今天的文章後,可以開始實際測試一下該如何與FHIR Server溝通,

先前有提過Bundle中有一個Type叫做Searchset,這個Bundle Type是FHIR Server在使用者發出Search請求時會回覆的FHIR Resource,

因為本身是Bundle的緣故,Bundle內含的entry都是由使用者發出Search請求的條件中吻合的Resource構成,

以概觀來看,Search的使用方法如下:

 GET | [base]/?parameter(statement)
 
其中[base]為目標FHIR Server的URL位址,
在這之中,Search Parameter可以大概分為兩類:

 1. 全域(global)參數    
 2. 特定Resource內的屬性項參數
 
 還有一類是
 3.Search Result修飾參數,但這並不會是主要的搜尋參數
 
以下會說明各項內容,
值得注意的是,FHIR本身也有將Search Parameter以Resource的方式實作,有興趣的可以看看。
https://www.hl7.org/fhir/searchparameter.html

 1. 全域(global)參數:
  對應3.2.1.8.1 Standard Parameters - Parameters for all resources
  
  這個分類主要是對應所有Resource都共有的屬性項,雖然並不是每個Resource內都一定會必填上某些欄位,
  但在概括尋找共通屬性時非常好用。
  
  _content  -> 查詢某些關鍵詞是否在這個Resource內,
   GET [base]/Observation?_content=cancer OR metastases OR tumor
   
  _filter   -> 進階查詢,將屬性項搜尋內置,一個parameter搜尋多個條件
   GET [base]/Observation?_filter=code eq http://loinc.org|1234-5 and subject.name co "peter"
   
  _has   -> 連鎖搜尋,跨Resource尋找指定的條件
   GET [base]/Patient?_has:Observation:patient:code=1234-5
   
  _id    -> 找符合Resource ID的Resource
   GET [base]/Observation?_id=101
   
  _in    -> 找某個Group中有的Resource ID
   GET [base]/Patient?_in=CareTeam/103
   
  _language  -> 找某個有標註其Resource.language欄位的Resource
   GET [base]/Questionnaire?_language=es
   
  _lastUpdated -> 找符合條件的上一次更新Resource的日期
   GET [base]/Observation?_lastUpdated=gt2010-10-01
   
  _list   -> 找符合條件的被參照Resource
   GET [base]/?_list=101
   
  _profile  -> 找Resource中參照的Profile的Resource
   GET [base]/Observation?_profile=http://hl7.org/fhir/StructureDefinition/bp
   
  _query   -> Named Queries,要事先定義parameter才能使用
   GET [base]/Patient?_query=current-high-risk&ward=1A
  
  _security  -> 找Resource.meta.security的欄位
   GET [base]/Observation?_security=http://terminology.hl7.org/CodeSystem/v3-Confidentiality|R
   
  _source   -> 找Resource.meta.source的欄位
   GET [base]/Patient?_source=http://example.com/Organization/123
   
  _tag   -> 找Resource.meta.tag的欄位
   GET [base]/Observation?_tag=http://terminology.hl7.org/ValueSet/v3-SeverityObservation|H
   
  _text   -> 找Resource中有該文本的Resource
   GET [base]/Observation?_text=cancer OR metastases OR tumor
   
  _type   -> 找指定Resource Type中符合條件的Resource
   GET [base]/?_type=Observation,Condition&patient=Patient/123

 2. 特定Resource內的屬性項參數
  這一項就比較容易懂了,其實就是去搜尋符合指定Resource中某個屬性項的值的Resource

   GET [base]/Observation?code=loinc|1234-1
   GET [base]/DocumentReference?contenttype=text/xml

 
 特定的operator可以見文章內3.2.1.5.6與3.2.1.6.3,Table可以看3.2.1.11
 如gt(greater than), below, eq(equal)等。
 
 3. 修飾搜尋結果的參數
  內容放在3.2.1.7,這個參數是要求FHIR Server在回傳搜尋結果時將結果的內文做一定程度的整理或型態改變,
  如_summary、_graph、_sort等,需要注意的是,這一類型的參數在一次搜尋需求中只能出現唯一一個。
 

會在這裡特別把Search拿出來講的原因是,FHIR是由下至上的資料堆砌方法,一個高層資源必由底層資源們構成,相互引用,

透過Search的操作,實作者可以把多個不同的Resource透過RESTful API與FHIR Server溝通,取得這些不同的Resource再組合成Bundle,

實際上這篇Search.html實在是太長了,很多時候筆者也是面對需要使用的條件搜尋才來找該怎麼使用他。

在FUME與HAPI FHIR協作的過程中,Search的行為也會一再的被提及起來使用,有興趣的讀者在看完今天的文章後

可以利用Postman到FHIR的公開伺服器搜尋測試
https://hapi.fhir.org/

另外補充一下,在FHIR的文件裡面到處充斥著MUST REQUIRED SHALL等關鍵全大寫詞,這個是RFC 2119 的五級要求標準

FHIR 要求發布者/實作者遵守這些層級的規範,標準化實作上的限制。

MUST / REQUIRED / SHALL
SHOULD / RECOMMENDED
MAY / OPTIONAL
SHOULD NOT / NOT RECOMMENDED
MUST NOT / SHALL NOT

明天開始會正式進入 FHIR Server的介紹,事實上有非常多家公司都有實作FHIR Server,本文會以開源的HAPI FHIR作為主要使用演示。


上一篇
[FUME TO FHIR] 09 RESTFUL API,PostMan基本使用
下一篇
[FUME TO FHIR] 11 FHIR Server介紹,HAPI, Aidbox, Firely等
系列文
30天FUME TO FHIR轉換實戰 - 從入門到燃燒殆盡30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言