辅助箱 JavaScript SDK FHIR-R4
如何使用
重要内容: 在我们开始之前,我们必须确保 辅助框 客户端 实值 配置 还有你的 准入政策 提供 你试图接触到的资源的颗粒性访问.
import { Client } from 'aidbox-sdk';
export const aidbox = new Client('<HOST_URL>', {
auth: {
method: 'basic',
credentials: {
username: '<CLIENT_NAME>',
password: '<CLIENT_SECRET>',
},
},
});
此代码从 Aidbox- sdk 软件包创建 SDK 的新实例, 并将其设置为连接到 Aidbox 服务器
运行中 <HOST_URL>。 。 。 .
你需要替换 <CLIENT_NAME> 财务报告和审定财务报表 <CLIENT_SECRET> 和你的客户身份和客户秘密
配置较早,SDK也支持两种类型的API(Aidbox,
斐济 显示差异只要提供其中之一
作为第三个参数.
通过在项目中使用 Aidbox-sdk ,您可以轻松地与 Aidbox 服务器交互,并进行诸如读取和 写入资源, 查找资源, 以及更多 .
那你可以随时随地使用辅助箱
import { aidbox } from '../aidbox-client';
async function getPatients() {
return aidbox.resource.list('Patient');
}
API 密码
资源。 列表
列表方法接受资源名称,并成为随后请求复杂化的依据
地点
添加搜索参数的方法
举例来说,你想找到所有叫约翰的病人,所以
resource.list('Patient').where('name', 'John');
或者你想找到所有叫约翰或史蒂夫的病人
resource.list('Patient').where('name', ['John', 'Steve']);
另外,支持数字和日期前缀的方法,只是通过它作为第三个参数
resource.list('Patient').where('birthdate', '2014-06-30', 'gt');
排序
方法排序添加排序参数
例如,您想要展示最年长的病人
resource.list('Patient').sort('birthdate', 'asc');
还有,你想用病人的名字来整理数据
resource.list('Patient').sort('birthdate', 'asc').sort('name', 'asc');
计数
限制请求返回资源数量的方法计数
resource.list('Patient').count(10);
内容提要
要请求服务器提供部分资源,您可以使用摘要函数。 此函数允许您 指定要收到的摘要类型,例如 真实、虚假、文本、数据或计数。 。 。 .
默认情况下, 当你向服务器提出请求时, 它会返回所有的资源 .
摘要功能接受几类摘要,每类摘要提供了不同程度的详细内容 数据。 例如:
-
true - 有限的资源元素子集
-
假 - 资源的所有部分
-
文本 - 只有文本、 id、 meta 和顶级强制元素
-
数据 - 没有文本元素的资源
-
计数 - 计算匹配资源,而不返回实际匹配
摘要( “数据”)
要件
如果您需要从服务器取回某一资源的特定元素,则可以使用元素函数. 此函数 允许您指定您感兴趣的资源中哪些部分,并可以帮助减少数据数量 由服务器返回.
通过使用元素函数,您可以自定义只获取您需要的数据的请求,而不是 请求整个数据集。 在处理大型数据集时,或当您只需要一个 可用数据的小子集.
要使用元素函数,只需在您想要获取的元素中传递作为参数。 例如,如果你 需要资源的名称和地址字段,您可以使用下列语法提出请求:
resource.list('Patient').elements(['name', 'address']);
此请求将只返回每个资源的名称和地址字段,而不是整个数据集 。 通过减少 ,您可以帮助精简请求,提高应用程序的性能.
资源.get
获取函数是用其ID检索单一资源的工具.
要使用 GetResource 函数,您必须在资源类型和ID中通过作为参数. 例如,如果你想的话 用 ID- ID 检索病人资源, 您可以使用下列语法提出请求 :
resource.get('Patient', 'id');
资源。创建
创建资源函数用于创建新资源.
第一个参数是一个资源名称,第二个参数是一个资源主体
resource.create('Patient', { active: true });
资源.更新()
更新功能用于更新其id识别的特定资源并配有部分数据集 在第三个参数中提供。 此函数允许部分更新资源而无需发送 整个资源对象.
第一个参数指定要更新的资源名称. 第二个参数确定具体 待更新的资源.
resource.update('Patient', 'c58f29eb-f28d-67c1-0400-9af3aba3d58c', {
active: false,
});
qq 资源. delete ()
删除资源功能用于删除其id识别的特定资源.
resource.delete('Patient', 'c58f29eb-f28d-67c1-0400-9af3aba3d58c');
创建订阅
Aidbox订阅是订阅和获取服务器上更新资源的通知的一种方式. 见 我们 订阅样本 更多细节.
await client.subsSubscription.create({
id: 'patient-created',
status: 'active',
trigger: { Patient: { event: ['create'] } },
channel: { endpoint: 'https://aidbox/patient-created' },
});
发送日志
Aidbox具有扩展其日志的能力. 有一个 a 一个 结束点 那个 从应用程序中接受带有定义结构的日志。 这些原木被吸收入弹性原木.
await client.sendLog({
type: "ui",
message: {event: "YOUR_EVENT", id: "id", ...},
v: "APP_VERSION",
fx: "fetchUsers"
})
Bundle 请求
SDK有帮助者为捆绑请求准备数据.
client.transformToBundle(
[
{
resourceType: 'Patient',
name: [
{
given: [''],
family: '',
},
],
},
],
'POST',
);
捆绑请求可以是 交易或批次 类型。 SDK 软件 默认使用“ 交易” 类型, 但可以通过在第二个参数中提供它来更改.
const data = ArrayOfPatients.map(client.bundleEntryPost);
await client.bundleRequest(data, 'batch');
任务 API
队列是实现可靠,同步,可伸缩,再试安全代码执行的宝贵工具. 通过使用队列,我们可以确保任务或消息得到可靠处理,即使面对失败或系统 中断. 队列的同步性质允许独立处理任务,允许并行化并减少等待 时间.
import { Engine } from 'aidbox-javascript-sdk';
const client = new Engine('http://localhost:8888', {
username: 'test',
password: 'secret',
});
定义
首先,我们必须创造任务的计划 设置限制 此实体的输入和输出参数 :
SendMessage
{:zen/tags #{awf.task/definition zen/schema}
:type zen/map
:keys {:params {:type zen/map
:require #{:phone :message}
:keys {:phone {:type zen/string}
:message {:type zen/string}}}
:result {:type zen/map
:require #{:status}
:keys {:status {:type zen/string}}}}}
关于任务定义的更多信息
注意: 每次修改配置项目, 我们必须重生 SDK 包
执行情况
下一步是创造商业逻辑 将被视为一个工人, 工人会处理每个任务,我们可以
client.task.implement(
'SendMessage',
async ({ params, status }) => {
const { message, phone } = params;
try {
await fetch('https://message-sending-server.com/', {
method: 'POST',
body: JSON.stringify({ message, phone }),
});
return { status: 'success' };
} catch (error) {
return { status: 'failure' };
}
},
{ batchSize: 5 },
);
执行
以独特的背景执行单一任务的方法
await client.task.execute('SendMessage', {
phone: '+1234567890',
message: 'Hi!',
});
工作流程引擎
Aidbox 提供了 Workflow 引擎模块,所以您可以定义自己的序列 在任务 API 之上的同步任务。 在许多业务流程中,某些任务取决于其他任务的完成. 通过工作流程执行定义任务依赖性允许开发者 以控制任务执行的顺序.
import { Engine } from 'aidbox-javascript-sdk';
const client = new Engine('http://localhost:8888', {
username: 'test',
password: 'secret',
});
工作流程定义
CheckOutWorkflow
{:zen/tags #{awf.workflow/definition zen/schema}
:type zen/map
:pool decision-pool
:keys {:params {:type zen/map
:require #{:clientId}
:keys {:clientId {:type zen/string}}}
:result {:type zen/map
:keys {:messageId {:type zen/string}}}
:error {:type zen/map
:keys {:message {:type zen/string}}}}}
关于工作流程定义的更多信息
注意: 每次修改配置项目, 我们必须重生 SDK 包
工作流程
await client.workflow.implement(
'CheckOutWorkflow',
async ({ params }, { execute, complete, fail }) => {
if (params.event === 'awf.workflow.event/workflow-init') {
const response = await fetch('https://server.com/get-client');
const { phone } = response.json();
return [
execute({
definition: 'SendMessage',
params: { phone, message: 'Hi!' },
}),
];
}
try {
const response = await fetch('https://workflow-state.com');
const data = response.json();
if (
params.event === 'awf.workflow.event/task-completed' &&
data.step === 1
) {
return [execute({ definition: 'UpdateInformation', params: {} })];
}
if (
params.event === 'awf.workflow.event/task-completed' &&
data.step === 2
) {
return [complete({})];
}
} catch (error) {
return [fail({ error })];
}
return [];
},
);
工作流程执行
await client.workflow.execute('CheckOutWorkflow', { clientId: '' });