如何在一次请求中从FHIR服务器获取患者两个编码的各1条Observation数据?
首先,你的请求返回total=0,大概率是因为目标患者(ID 653528)在该DSTU3服务器上没有这两个编码(3141-9、20570-8)对应的Observation数据。你可以先分别单独请求验证:
- 单独请求编码3141-9:
GET https://fhirtest.uhn.ca/baseDstu3/Observation?code=3141-9&patient=653528 - 单独请求编码20570-8:
GET https://fhirtest.uhn.ca/baseDstu3/Observation?code=20570-8&patient=653528
如果这两个请求都没有返回数据,那当前的空结果是正常的。如果有数据,那你原来的请求还有个问题:_count=1会只返回匹配条件的1条数据,而不是每个编码各返回1条。针对你的需求,分两种情况解决:
针对DSTU3版本(你当前使用的版本)
DSTU3不支持按编码分组搜索的_group参数,所以需要用Batch批量请求——在一个POST请求中包含两个独立的搜索操作,分别获取每个编码的1条数据。
具体请求示例
发送一个POST请求到FHIR服务器根地址(https://fhirtest.uhn.ca/baseDstu3/),请求体为以下JSON格式的Bundle,同时设置请求头Content-Type: application/fhir+json:
{ "resourceType": "Bundle", "type": "batch", "entry": [ { "request": { "method": "GET", "url": "Observation?code=3141-9&patient=653528&_count=1&_format=json" } }, { "request": { "method": "GET", "url": "Observation?code=20570-8&patient=653528&_count=1&_format=json" } } ] }
服务器会返回一个Bundle,其中每个entry对应一个搜索请求的结果,你就能拿到两个编码各1条Observation数据了。
针对R4及以上版本(如果可以升级版本)
R4引入了_group参数,可以直接通过一个GET请求实现按编码分组,每组返回1条数据(默认返回最新的,可通过_sort控制排序):
GET https://fhirtest.uhn.ca/baseR4/Observation?code=3141-9,20570-8&patient=653528&_group=code&_count=1&_format=json
这个请求会自动按code分组,每个编码返回1条匹配的Observation,比Batch请求更简洁。
内容的提问来源于stack exchange,提问作者DisplayName

