Flutter RESTful API交互插件fhir_at_rest的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter RESTful API交互插件fhir_at_rest的使用

简介

fhir_at_rest 是一个用于在Flutter项目中与FHIR® (Fast Healthcare Interoperability Resources) 服务器进行RESTful请求交互的库。FHIR®是HL7注册的商标,并在此处获得HL7的使用许可。本项目基于基础FHIR包,旨在简化对FHIR API的RESTful请求。

请求格式

基本的请求格式如下:

VERB [base]/[type]/[id] {?_format=[mime-type]}
  • base: 查询的网站地址(例如:https://hapi.fhir.org/baseR4
  • type: 资源类型(例如:Patient
  • id: 您感兴趣的资源ID
  • mime-type: FHIR规范定义了三种正式的MIME类型,但此包仅支持application/fhir+json

支持的交互类型

以下是fhir_at_rest支持的交互类型:

  • read: 读取资源
  • vread: 读取特定版本的资源
  • update: 更新资源
  • patch: 部分更新资源
  • delete: 删除资源
  • create: 创建资源
  • search: 搜索资源
  • search-all: 全局搜索资源
  • capabilities: 获取服务器能力
  • transaction: 批量事务处理
  • history: 获取资源历史
  • history-type: 获取指定类型的资源历史
  • history-all: 获取所有资源的历史
  • operation: 执行操作

枚举类型

为了确保数据质量和符合规范,尽可能地使用枚举类型,包括资源类型等。

示例代码

以下是一些常用的示例代码:

读取资源

import 'package:fhir/r4.dart';
import 'package:fhir_at_rest/r4.dart';

Future<void> main() async {
  // 读取患者信息
  var request = FhirRequest.read(
    base: Uri.parse('http://hapi.fhir.org/baseR4'),
    type: R4ResourceType.Patient,
    id: Id('12345'),
  );
  var response = await request.request();
  print(response);
}

创建资源

final patient = Patient(id: Id('12345'));
final createRequest = FhirRequest.create(
  base: Uri.parse('http://hapi.fhir.org/baseR4'),
  resource: patient,
);
var createResponse = await createRequest.request();
print(createResponse);

更新资源

final patient = Patient(id: Id('12345'));
final updateRequest = FhirRequest.update(
  base: Uri.parse('http://hapi.fhir.org/baseR4'),
  resource: patient,
);
var updateResponse = await updateRequest.request();
print(updateResponse);

删除资源

final deleteRequest = FhirRequest.delete(
  base: Uri.parse('http://hapi.fhir.org/baseR4'),
  type: R4ResourceType.Patient,
  id: Id('12345'),
);
var deleteResponse = await deleteRequest.request();
print(deleteResponse);

搜索资源

final List<String> parameters = ['_id=12345'];
final searchRequest = FhirRequest.search(
  base: Uri.parse('http://hapi.fhir.org/baseR4'),
  type: R4ResourceType.Patient,
  parameters: parameters,
);
var searchResponse = await searchRequest.request();
print(searchResponse);

获取服务器能力

final capabilitiesRequest = FhirRequest.capabilities(
  base: Uri.parse('http://hapi.fhir.org/baseR4'),
  mode: Mode.normative,
);
var capabilitiesResponse = await capabilitiesRequest.request();
print(capabilitiesResponse);

批量事务处理

final Bundle bundle = Bundle(
  type: BundleType.transaction,
  id: Id('12345'),
  entry: [
    BundleEntry(
      request: BundleRequest(method: BundleRequestMethod.delete),
    )
  ],
);
final transactionRequest = FhirRequest.transaction(
  base: Uri.parse('http://hapi.fhir.org/baseR4'),
  bundle: bundle,
);
var transactionResponse = await transactionRequest.request();
print(transactionResponse);

这些示例展示了如何使用fhir_at_rest插件执行常见的FHIR API交互。根据您的具体需求,您可以进一步扩展和定制这些示例代码。


更多关于Flutter RESTful API交互插件fhir_at_rest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter RESTful API交互插件fhir_at_rest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中如何使用fhir_at_rest插件与RESTful API进行交互,以下是一个示例代码案例。fhir_at_rest插件通常用于与FHIR(Fast Healthcare Interoperability Resources)服务器进行交互,这是一个用于医疗保健数据交换的标准。

首先,确保你已经在pubspec.yaml文件中添加了fhir_at_rest依赖:

dependencies:
  flutter:
    sdk: flutter
  fhir_at_rest: ^x.y.z  # 替换为最新版本号

然后,运行flutter pub get来获取依赖。

下面是一个使用fhir_at_rest插件从FHIR服务器获取患者资源的示例代码:

import 'package:flutter/material.dart';
import 'package:fhir/r4.dart' as fhir;
import 'package:fhir_at_rest/fhir_at_rest.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<fhir.Patient> patients = [];
  bool loading = true;
  String errorMessage;

  @override
  void initState() {
    super.initState();
    fetchPatients();
  }

  void fetchPatients() async {
    setState(() {
      loading = true;
      errorMessage = null;
    });

    try {
      // 创建一个FHIR客户端
      var client = FhirClientR4(baseUrl: Uri.parse('https://your-fhir-server-url/'));

      // 获取所有患者资源
      var bundle = await client.search<fhir.Patient>(
        searchParams: SearchParams()
          ..add('_id', SearchParamType.token, 'your-search-parameter'), // 可选:添加搜索参数
      );

      // 提取患者资源
      patients = bundle.entry.map((e) => e.resource as fhir.Patient).toList();
    } catch (e) {
      print('Error fetching patients: $e');
      setState(() {
        errorMessage = 'Failed to fetch patients: ${e.toString()}';
      });
    } finally {
      setState(() {
        loading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FHIR Patient List'),
        ),
        body: loading
            ? Center(child: CircularProgressIndicator())
            : Column(
                children: [
                  if (errorMessage != null)
                    Text(
                      errorMessage,
                      style: TextStyle(color: Colors.red),
                    ),
                  Expanded(
                    child: ListView.builder(
                      itemCount: patients.length,
                      itemBuilder: (context, index) {
                        var patient = patients[index];
                        return ListTile(
                          title: Text(patient.name[0].family + ' ' + patient.name[0].given.join(' ')),
                          subtitle: Text(patient.id),
                        );
                      },
                    ),
                  ),
                ],
              ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 创建一个Flutter应用,并在initState方法中调用fetchPatients函数来获取患者资源。
  2. 使用FhirClientR4类创建一个FHIR客户端,并指定FHIR服务器的URL。
  3. 使用client.search<fhir.Patient>方法执行搜索操作,获取所有患者资源。你可以根据需要添加搜索参数。
  4. 将获取到的患者资源存储在patients列表中,并在UI中显示。
  5. 处理加载状态和错误消息。

请注意,你需要将https://your-fhir-server-url/替换为你的实际FHIR服务器URL,并根据需要调整搜索参数。

这个示例提供了一个基本框架,你可以根据需要扩展和修改,以适应你的具体需求。

回到顶部