You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无数据库REST API桥:非FHIR转FHIR映射及FHIR工具实现问询

关于无数据库FHIR Bridge API的实现方案

1. node-fhir-server-core 是否适用?

完全可以用!虽然它常被用来构建带数据库的FHIR服务器,但完全适配你这种无数据库的“桥接”场景——核心是它提供了FHIR资源的结构定义、内置验证工具,还有标准化的路由框架,刚好能帮你处理FHIR格式的输出合规性,不用自己从零搭建FHIR的基础架构。

2. 非FHIR到FHIR的映射函数该放哪里?

在node-fhir-server-core的架构里,你可以把映射逻辑放在**自定义服务处理器(service handlers)**中,具体步骤如下:

  • 先为你要转换的FHIR资源类型(比如Patient、Observation等)创建对应的服务文件,比如services/patient.js。
  • 在服务的read、search等方法里,跳过数据库查询步骤,直接调用第三方API获取原始JSON数据,然后在方法内部完成映射转换。
  • 举个极简示例:
// services/patient.js
module.exports = {
  read: async (args) => {
    // 1. 调用第三方API拿到原始数据
    const rawPatientData = await fetch(`https://third-party-api/patients/${args.id}`).then(res => res.json());
    
    // 2. 执行非FHIR到FHIR的映射逻辑
    const fhirPatient = {
      resourceType: 'Patient',
      id: rawPatientData.external_id,
      name: [{
        family: rawPatientData.last_name,
        given: [rawPatientData.first_name]
      }],
      birthDate: rawPatientData.date_of_birth,
      // 其他字段的映射规则按需补充...
    };
    
    // 3. 返回转换后的FHIR资源,框架会自动处理响应格式
    return fhirPatient;
  }
};
  • 最后在FHIR服务器的配置文件里注册这个服务,框架会自动把对应的FHIR标准路由(比如/Patient/:id)绑定到这个处理器上。

3. 如果不用node-fhir-server-core,纯Express怎么实现?

如果想完全自定义,纯Express也能搞定,核心要解决两个核心问题:FHIR资源验证和标准化响应格式:

  • FHIR验证:可以用fhir-validator或hl7-fhir-validator这类npm包,它们能根据FHIR官方Schema验证你的转换结果是否合规。示例:
const { validate } = require('fhir-validator');
const express = require('express');
const app = express();

// 自定义映射函数
const mapRawToFHIR = (rawData) => {
  return {
    resourceType: 'Patient',
    id: rawData.external_id,
    name: [{ family: rawData.last_name, given: [rawData.first_name] }]
    // 其他字段映射...
  };
};

app.get('/Patient/:id', async (req, res) => {
  try {
    // 获取原始数据并转换
    const rawData = await fetch(`https://third-party-api/patients/${req.params.id}`).then(res => res.json());
    const fhirPatient = mapRawToFHIR(rawData);
    
    // 验证FHIR资源(指定使用的FHIR版本,比如R4)
    const validationResult = await validate(fhirPatient, 'R4');
    if (!validationResult.isValid) {
      // 按照FHIR规范返回错误响应(用OperationOutcome资源)
      return res.status(400).json({
        resourceType: 'OperationOutcome',
        issue: validationResult.errors.map(err => ({
          severity: 'error',
          code: 'invalid',
          details: { text: err.message }
        }))
      });
    }
    
    // 返回合规的FHIR响应
    res.json(fhirPatient);
  } catch (err) {
    res.status(500).json({
      resourceType: 'OperationOutcome',
      issue: [{ severity: 'error', code: 'exception', details: { text: err.message } }]
    });
  }
});
  • 标准化路由和响应:手动实现FHIR的标准路由(比如/Patient、/Observation等),并严格按照FHIR规范处理成功/错误响应,比如用OperationOutcome资源返回错误信息。
  • 可以封装一个独立的映射工具类,把不同资源类型的转换逻辑分开,保持代码的可维护性。

内容的提问来源于stack exchange,提问作者Barjuan Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:28:14