1. FHIR服务端平台工程导论
FHIR(Fast Healthcare Interoperability Resources,快速医疗互操作资源)是HL7组织发布的医疗数据交换标准。它用“资源(Resource)”作为最小数据单元,把患者、就诊、检验、用药、医嘱等医疗对象抽象为可独立寻址的JSON/XML结构,并通过RESTful API暴露增删改查能力。与早期HL7 V2消息、V3/CDA文档相比,FHIR的定位不是“再造一套消息格式”,而是把医疗数据交换从“点对点定制接口”推进到“面向资源的平台化服务”。理解这一点,是理解服务端平台工程价值的起点。
FHIR的定位与价值
FHIR的核心价值可以概括为三点。第一,资源化建模:每个资源有稳定的类型名(如Patient、Observation、Encounter)、唯一标识(id)和标准字段,服务端可以按类型和id定位数据,客户端不必解析整条消息。第二,统一交互语义:FHIR定义了RESTful交互(read、search、create、update、delete)、批量操作(Bundle)、订阅(Subscription)和操作(Operation),使不同厂商的系统遵循同一套调用约定。第三,可扩展与可约束:通过扩展(Extension)承载标准未覆盖的本地字段,通过Profile和Implementation Guide(IG)对资源做约束,兼顾通用性与本地化。
在工程实践中,FHIR服务端不是“把数据库表映射成JSON”这么简单。它需要处理资源版本、引用完整性、搜索参数、术语绑定、权限控制、审计与并发。例如,一个Observation资源引用Patient和Encounter,服务端在写入时必须校验引用目标是否存在;搜索时需支持patient、code、date等参数,并返回Bundle。这些能力决定了平台能否被真实业务系统集成。
服务端平台的核心能力
一个可用的FHIR服务端平台,通常需要具备以下能力层次:
- 资源存储与版本管理:支持资源CRUD、历史版本(_history)、条件更新与乐观锁(ETag/If-Match)。
- 搜索与查询:实现标准搜索参数、链式搜索(_include/_revinclude)、分页(_count/_offset)和排序。
- 术语与校验:对绑定到ValueSet的字段做校验,支持CodeSystem/ValueSet资源的解析与展开。
- 安全与审计:基于OAuth 2.0/SMART on FHIR的授权、Scope控制、AuditEvent记录。
- 互操作与集成:支持Bundle批量提交、Subscription通知、以及与HIS/LIS/EMR的适配层。
这些能力并非孤立模块,而是围绕“资源生命周期”协同工作。下图展示了FHIR服务端平台从客户端请求到资源落库、再到订阅通知的核心数据流与能力分层,帮助建立整体架构认知。
课程目标与实战项目全景
本课程的目标不是停留在“读懂FHIR文档”,而是能够独立设计、实现并验证一个可运行的FHIR服务端平台。围绕这一目标,课程将沿着“标准理解—架构设计—核心实现—集成验证”的路径推进,最终交付一个具备资源CRUD、搜索、版本管理、术语校验和订阅通知能力的服务端原型。
实战项目设定为一个面向区域医疗的FHIR R4服务端平台,核心场景包括:患者注册与查询、检验报告(Observation)写入与检索、就诊(Encounter)关联、以及基于Subscription的检验危急值通知。项目采用分层架构:接入层负责RESTful路由与鉴权,服务层实现资源生命周期与搜索,存储层采用“资源主表+搜索索引表”的混合模型,集成层对接模拟HIS与LIS。
为了让读者对项目边界有清晰预期,下面给出一个简化的能力验收清单,可作为后续章节实现与自测的参照:
| 能力项 | 验收要点 | 示例判断依据 |
|---|---|---|
| 资源CRUD | POST创建Patient,GET按id读取,PUT更新并生成新版本 | 返回201/200,meta.versionId递增 |
| 搜索 | 支持patient、code、date参数,返回searchset Bundle | Bundle.total与entry数量一致 |
| 版本历史 | GET /Patient/{id}/_history返回历史版本列表 | 至少包含2个版本条目 |
| 术语校验 | 写入Observation时校验code是否在绑定ValueSet内 | 非法code返回422及OperationOutcome |
| 订阅通知 | 危急值Observation写入后触发Subscription通知 | 模拟接收端收到rest-hook回调 |