大家可能已经听说过,我们近期推出了InterSystems API管理器 (以下简称IAM)。InterSystems IRIS数据平台™新增了一项功能,支持用户监视、控制和管理IT基础架构中基于Web的API间通信。
在本文中,我将向大家展示如何设置IAM,并重点介绍IAM中可用的一些功能。InterSystems API管理器可提供你所需的一切功能。
表述性状态传递 (REST) 是一种软件架构风格,它定义了一组用于创建 Web 服务的约束。符合 REST 架构风格的 Web 服务(称为 RESTful Web 服务 (RWS))提供了互联网上计算机系统之间的互操作性。RESTful Web 服务允许请求系统通过使用统一预定义的无状态操作集来访问和操作 Web 资源的文本表示。其他类型的 Web 服务(如 SOAP Web 服务)需要公开它们自己的专有操作集。
大家可能已经听说过,我们近期推出了InterSystems API管理器 (以下简称IAM)。InterSystems IRIS数据平台™新增了一项功能,支持用户监视、控制和管理IT基础架构中基于Web的API间通信。
在本文中,我将向大家展示如何设置IAM,并重点介绍IAM中可用的一些功能。InterSystems API管理器可提供你所需的一切功能。
.png)
请求信息如下:
POST /uploadPersonExcel HTTP/1.1
Host: localhost:8017
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
cache-control: no-cache
Postman-Token: 1c23edfe-1e83-44c6-8f91-e06bccfd4af3
Content-Disposition: form-data; name="file"; filename="C:\Users\elite\Desktop\personinfo.xlsx
------WebKitFormBoundary7MA4YWxkTrZu0gW--
2.Ensemble中请求代码如下:
ClassMethod PostFile()
{
Set excelpath = "C:\Users\elite\Desktop\personinfo.xlsx"
s filename="personinfo.大家好!
InterSystems IRIS有一个叫做互操作性Interoperability的菜单。
它提供了轻松创建系统集成的机制(适配器、记录图、BPM、数据转换等),因此不同的系统可以轻松地连接起来。
在数据中继过程中可以包括各种操作,比如:为了连接那些通常不连接的系统,可以根据目的系统的规格要求来接收(或发送)数据。另外,在发送数据之前,可以从另一个系统获取和添加信息。以及,信息可以从数据库(IRIS或其他)获取和更新。
为此,我们会撰写一系列的文章,将讨论以下主题,同时看一下示例代码,以帮助你了解它是如何工作的,以及在用互操作性整合系统时需要什么样的开发。
* How it works 它是如何工作的
* What a Production is 什么是Production ?
* Message 消息
* Component Creation 组件的创建
* 1)Business Operations 业务操作
*2)Business Processes 业务流程
*3) Business Services 业务服务
首先,介绍一下我们在这个系列中要使用的案例。
一家经营着一个购物网站的公司,目前正在改变其产品信息的显示顺序,以配合季节的变化。 然而,有些商品无论在什么季节都能卖得很好,而有些商品却在意想不到的时候卖得很好,这与目前改变顺序的显示规则不相符。
“池大小”(PoolSize)设置的值决定了一个组件的作业的量和启动方式。在这篇文章中我们将具体讨论对于不同类型的组件来说“池大小”设置的可能值和这些值所代表的含义。
Pool Size = 1
对于所有的组件来说,运行池大小为1的含义都是一样的: 该组件有且只有一个作业,单独运行该组件的代码,顺序处理发送到该组件的消息(FIFO)。
Pool Size > 1
对于业务进程(BP)和业务操作(BO)来说,当运行池大小大于1时,该组件将运行多个作业(作业数=运行池大小设置数)。每个作业都只运行该组件的代码,但消息处理的顺序将被打乱。将运行池的大小设为大于1的值可以在一定程度上提升组件处理消息的性能,但是每个作业的性能还是受限于系统资源的,所以并不是说组件的性能可以随着运行池的大小增加而无限提升。
对于轮询类业务服务(Polling BS)来说,当运行池大小大于1时,该服务也将运行多个作业(作业数=运行池大小设置数)。但这种配置会导致多个进程对轮询结果产生竞争(race condition),所以一般情况下轮询服务不应将运行池大小设为大于1的数值。
对于作为服务器端接收外来网络连接的业务服务(TCP、HTTP、REST、SOAP等)来说,当运行池大小大于1时,运行的作业数将取决于“为每个连接创建作业(Job Per Connection)”设置的值。
InterSystems API Manager (IAM) 版本1.5已正式发布。
IAM容器,包括从原有IAM版本升级的所有相关工件, 现在可以在 WRC 软件发布网址 组件区下载。
该版本的小版本号是 IAM 1.5.0.9-4。
InterSystems API Manager 1.5 使管理API通讯、与你的环境集成、加载API用户更加容易。它包含很多新特性,包括:
这个版本基于Kong Enterprise version 1.5.0.9。之前的IAM版本包括一个贴牌版本的Kong Enterprise, 在本版本中的Kong Enterprise不再贴牌。 这个变化让我们可以更快的节奏带给您新的版本,并更有效地利用Kong提供的文档和其它资源。
请在 这里 查看IAM 1.5 的文档。这个文档仅说明IAM特殊的元素。产品中的文档链接直接打开Kong Enterprise的文档。
从IAM 0.34-1 升级需要通过3个中间版本累积升级,在 文档中有详细的说明。
IAM 仅以OCI (Open Container Initiative) 或 Docker 容器格式发放。
在这篇文章中,你可以访问InterSystems开发者社区中与学习InterSystems IRIS最相关主题的文章库。找到按机器学习、嵌入式Python、JSON、API和REST应用、管理和配置InterSystems环境、Docker和云、VSCode、SQL、分析/BI、全局、安全、DevOps、互操作性、Native API排列的顶级发表的文章。快来享受学习的乐趣吧!
机器学习是建立先进的数据分析和自动化人工活动的一种必要的技术,具有很好的效率。它可以创建认知模型,从现有的数据中学习,并根据其自我调整的算法进行预测、概率计算、分类、识别和 "非创造性 "的人类活动的自动化。
在所有情况下,InterSystems IRIS作为一个数据平台和环境来创建、执行、提供和使用这些机器学习模型。IRIS能够从SQL命令(IntegratedML)中使用ML,使用嵌入式Python和PMML(预测模型标记语言)来执行ML。你可以在以下文章中查看它的功能:
|
标题
|
描述
|
地址URL
|
|---|---|---|
|
一体化机器学习动手实验
|
一体化机器学习概览ML
|
.png)
.png)
- 设置 HTTP 服务
- 输入 FHIR 服务器的路径
- 输入 FHIR 服务的 URL
- 使用配置的凭证



.png)
.png)
.png)
测试 FHIR 客户端
.png)
.png)
跟踪测试结果
.png)
.png)
.png)
此方法返回命名数据库的 METADATA.zip 文件的二进制内容。 Atelier 使用此文件来存储索引信息,以便为将来的会话保留此信息。
GET http://server:port/api/atelier/v1/%25SYS/metadata/database
注意:因为 % 是 URL 特殊字符,所以要指定文字 %,必须在其后跟 25(百分号字符的十六进制代码)。因此,必须使用 %25SYS 来指定文字 %SYS。
HTTP 200 如果正常。HTTP 404。HTTP 500 如果发生意外错误(详细信息将在状态错误数组中)。此方法返回在服务器上定义或为服务器上指定命名空间定义的 Web 应用程序列表。
GET http://server:port/api/atelier/v1/%25SYS/cspapps
GET http://server:port/api/atelier/v1/%25SYS/cspapps/namespace
其中:
namespace
指定命名空间的名称。如果未指定命名空间,则此方法返回所有命名空间的 Web 应用程序。
在本文中,我想谈一谈规范优先的 REST API 开发方式。
传统的代码优先 REST API 开发是这样的:
规范优先遵循同样的步骤,不过是反过来的。 我们先制定规范(同时兼做文档),然后根据它生成一个样板 REST 应用,最后编写一些业务逻辑。
这是有好处的,因为:
本附录列出了 API 管理工具在生成 REST 服务类时使用的 OpenAPI 2.0 规范的属性。此处未列出的属性将被忽略。有几个扩展属性;它们的名称以 x-ISC 开头。
SwaggerbasePath
consumes
host
produces
definitions (请注意,API 管理工具在生成代码时不使用 Schema 对象的任何属性)
parameters (for details, see “Parameter Object”)
paths (for details, see “Path Item Object”)
info (for details, see “Info Object”)
swagger (must be "2.0")
有关这些属性的详细信息,请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swagger-object。
什么是 JWT?
JWT (JSON Web Token,JSON 网络令牌)是一种开放标准(RFC 7519),它提供了一种轻量级、紧凑、自足的方法,用于在双方之间安全地传输信息。它常用于网络应用程序中的身份验证、授权和信息交换。
JWT 通常由三部分组成:
1.JOSE(JSON Object Signing and Encryption,JSON 对象签名和加密)标头
2.有效载荷
3.签名
这些部分以 Base64Url 格式编码,并用点(.)分隔。
JWT 的结构
标题
{ "alg": "HS256", "typ": "JWT"}
有效载荷
{"sub": "1234567890", "name": "John Doe", "iat": 1516239022}签名:
签名用于验证 JWT 的发件人是否为其本人,并确保信息未被篡改。
创建签名
1. base64 编码报头和有效载荷。
2.使用秘钥(对于对称算法,如 HMAC)或私钥(对于非对称算法,如 RSA)应用签名算法(如 HMAC SHA256 或 RSA)。
3.对结果进行 Base64Url 编码,以获得签名。
JWT 样本。查看JWT 内容
FHIR是快速医疗互操作资源(Fast Healthcare Interoperability Resources)的缩写,所以FHIR的核心是资源模型。它的颗粒度和结构都优于之前的V2 、V3、CDA标准,而且能够灵活扩展。另外一个优势就是它的API,它不仅提供了针对于资源模型本身的原子化的CRUD(创建、读取、更新、删除的这样一些原子化操作),而且提供了查询这种更复杂操作的能力,同样API是可以扩展的。
此方法对 IRIS 表执行 SQL 查询并返回结果。请求正文是指定查询的 JSON 对象。它返回一个匹配查询条件的对象数组。每个返回的对象都包含与查询返回的一行相关的信息。
POST http://server:port/api/atelier/v1/namespace/action/query
SQL 查询在 URL 请求的正文中指定。查询必须在指定的命名空间中指定一个数据库。
此调用需要标头 Content-Type application/json。
返回内容是一个对象数组。
本章讨论如何修改 REST 服务的实现类。
实现类最初包含存根方法,如下例所示:
/// Returns all pets from the system that the user has access to<br/>
/// The method arguments hold values for:<br/>
/// tags, tags to filter by<br/>
/// limit, maximum number of results to return<br/>
ClassMethod findPets(tags As %ListOfDataTypes(ELEMENTTYPE="%String"), limit As %Integer) As %Stream.Object
{
//(Place business logic here)
//Do .JWT 是一种结构紧凑、URL 安全的身份验证、授权或信息交换方式。在身份验证的情况下,服务器会向已通过身份验证的客户端提供一个 JWT,这样客户端在 JWT 过期之前就无需再提供密码来访问服务器上受保护的资源。
在InterSystems IRIS中,可以使用/api/mgmnt自动创建REST的 .disp .impl 和 .spec 类,本篇文章不介绍具体创建REST服务的流程,具体内容请参考社区文章创建REST 服务。
医疗行业的互操作性在改善病人护理、降低医疗服务提供者的成本以及为提供者提供更准确的情况方面发挥着重要作用。然而,由于有这么多不同的系统,数据的格式也有很多不同的方式。有许多标准被创造出来以试图解决这个问题,包括HL7v2、HL7v3和CDA,但每一种都有其缺点。
FHIR,即快速医疗互操作性资源,是一种新的医疗数据格式,旨在解决这些问题。它是由国际卫生级七组织(HL7)开发的,该组织还开发了HL7v2、HL7v3和CDA。
今天我们将探讨如何在VS代码中借助IntelliSense和自动完成功能,通过使用FHIR Schema 创建和验证FHIR资源。
第 1 步 :从FHIR 官方网站 https://www.hl7.org/fhir/下载 JSON schema file 文件用来做资源校验
.png)
.png)
第 2 步: 创建文件夹(在这个例子中,我使用病人文件夹和病人资源),并将提取的fhir.schema.json文件复制到同一文件夹,然后从VS Code中打开文件夹.png)
第 3 步: 通过修改setting.json文件,设置VS代码以识别FHIR模式。
按CTRL+SHIFT+P并输入工作区设置JSON文件.png)
第 4 步: 在同一文件夹中创建一个新文件patient.fhir.json。
REST是一种架构风格,而不是一种格式。尽管REST经常使用HTTP来传输消息,使用JSON来传递数据,但你也可以用XML或纯文本来传递数据。REST利用了现有的网络标准,如HTTP、URL、XML和JSON。
虽然它可以使用XML来描述数据,但它更常使用JSON,这是一个轻量级的数据封装器。
InterSystems REST服务由以下组件组成:
规范类(%REST.Spec的一个子类):这个类包含了REST服务的OpenAPI 2.0规范(Swagger)。InterSystems支持几个扩展属性,你可以在规范中使用。
调度类(%CSP.REST的一个子类):这个类负责接收HTTP请求并在实现类中调用合适的方法。
实现类(%REST.Impl的子类):这个类定义了实现REST调用的方法。
Web应用程序:它通过InterSystems Web Gateway提供对REST服务的访问。
可以使用/api/mgmnt服务来创建、更新和删除REST服务。
Intersystems IRIS for Health 对 FHIR 行业标准提供了出色的支持。主要特点是:
1.FHIR 服务器
2. FHIR数据库
3. REST 和 ObjectScript API 用于 FHIR 资源(患者、问卷、疫苗等)的 CRUD 操作
本文演示了如何使用这些功能,并展示了用于创建和查看表单类型的 FHIR 资源的Angula前端。
要创建 FHIR 服务器,您必须将以下说明添加到 iris.script 文件中(来自:https://openexchange.intersystems.com/package/iris-fhir-template)
zn "HSLIB" set namespace= "FHIRSERVER" Set appKey = "/fhir/r4" Set strategyClass = "HS.FHIRServer.Storage.Json.InteractionsStrategy" set metadataPackages = $lb ( "hl7.fhir.r4.core@4.0.假设您想编写一些真正的web应用程序,例如medium.com网站的简单克隆。这类应用程序可以在后端使用任何不同的语言编写,也可以使用前端的任何框架编写。编写这样一个应用程序有很多方法,你也可以看看这个项目。它为完全相同的应用程序提供了一堆前端和后端实现。您可以轻松组合它们,任何所选前端应该与任何后端搭配。
我来介绍一下这个使用后端InterSystems IRIS来实现后端的相同的应用程序。
本附录描述了如何通过继承 %CSP.REST 类来手动创建 REST 服务;此过程创建了一个手动编码的 REST 服务,它不能与所有 API 管理工具一起使用。
REST 服务的基础知识要手动定义 REST 服务,请执行以下操作:
REST 服务类 — %CSP.REST 的子类。在子类中:
URL 映射,该映射指定为 REST URL 和 HTTP 方法执行的 IRIS 方法。UseSession 参数。此参数控制每个 REST 调用是在其自己的 Web 会话下执行还是与其他 REST 调用共享一个会话。如果想将实现代码与调度代码分开,可以在单独的类中定义实现 REST 服务的方法,并从 URL 映射中调用这些方法。
REST 服务类作为其调度类的 Web 应用程序。要定义 Web 应用程序及其安全性,请转至 Web 应用程序页面(单击System Administration > Security > Applications > Web Applications)。
定义 Web 应用程序时,将 Dispatch Class 设置为 REST 服务类的名称。
此外,将应用程序的名称指定为 REST 调用的 URL 的第一部分。
大家好,社区成员们:
对于刚接触InterSystems IRIS的开发者而言,这有个好消息!我们现已在Instruqt平台上推出了实操互动教程!这些教程非常适合希望快速上手、在真实环境中演练,并建立对基于IRIS的开发信心的开发者。(译者注:国内需要🪜)
.png)
回过头来,业务场景都是千人千面的, FHIR怎么能够用一个标准涵盖尽可能多的用例?HL7吸收了V3的教训,在V3里面不成功的、或者说采纳度比较低的一个原因就V3试图穷举所有用例,由HL7组织自己来规范这些用例。这个是蛮沉重的教训,这也是V3的方法论虽然好,但是这套实施的路线在国际上有很大障碍的原因。
GetEnsClassType此方法返回用于创建产品的类的名称列表。可以指定要获取的类的类型,例如业务服务类。
GET http://server:port/api/atelier/v1/namespace/ens/classes/type
type 是一个整数,并返回对应于该整数的类,如下所示:
Adapters 1
InboundAdapters 2
OutboundAdapters 3
Messages 4
Requests 5
Responses 6
BusinessServices 7
BusinessProcesses 8
BusinessOperations 9
DataTransformation 10
Production 11
BusinessHost 12
Dashboard 13
Rule 14
以下返回的内容是一个类名数组:
{
status: {
errors: []
summary: ""
}
console: []
result: {
content: [
"Ens.Enterprise.MsgBank.BankTCPAdapter",
"Ens.下表列出了修改规范类的原因并简要总结了所需的更改:
| 原因 | 改变 |
|---|---|
| 更新或替换规范 | 手动修改 OpenAPI XData 块或通过重新生成规范类。 |
启用 REST 服务以支持 CORS |
手动修改 OpenAPI XData 块;还添加一个类参数并创建一个自定义调度超类。 |
启用 REST 服务以支持 Web 会话 |
添加类参数。 |
| 指定使用端点所需的权限 | 手动修改 OpenAPI XData 块。 |
| 覆盖默认内容类型、响应字符集或输入流处理 | 添加类参数。 |
| 为服务方法指定一个非默认名称 | 手动修改 OpenAPI XData 块。 |
无论何时编译规范类,编译器都会在同一个包中重新生成调度类并更新实现类。
只需将类参数添加到规范类并重新编译,就可以覆盖 REST 服务的几个关键方面。
REST 服务需要 application/json 内容类型。要覆盖它,请将以下内容添加到规范类:Parameter CONTENTTYPE = "some-content-type";
其中 some-content-type 是 MIME 内容类型。
REST 服务的响应消息采用 UTF-8 格式。对于即将到来的Python 竞赛,我想制作一个小型演示,介绍如何使用 Python 创建一个简单的 REST 应用程序,该应用程序将使用 IRIS 作为数据库。使用这个工具
大家好!
InterSystems IRIS 有一个名为 Interoperability(互操作性)的菜单。
它提供了轻松创建系统集成(适配器、记录映射、BPM、数据转换等)的机制,因此可以轻松连接不同的系统。
数据中继过程中可以包括各种操作,例如:为了连接没有正常连接的系统,可以根据目标系统的规范来接收(或发送)数据。 此外,在发送数据之前,可以从其他系统获取和添加信息。 还可以从数据库(IRIS 等)获取和更新信息。
在本系列文章中,我们将讨论以下主题,同时查看 示例代码 以帮助您了解工作原理以及在系统中集成互操作性时需要进行哪种开发。
首先,我介绍一下我们将在本系列文章中使用的案例研究。
某公司运营着一个购物网站,他们正在更改产品信息的显示顺序以配合季节变化。
但是,有些商品无论季节如何都能卖得很好,而有些商品在意料之外的时间卖出,这不符合当前的显示顺序更改规则,
因此,我们研究了按照当天的温度而不是季节来更改显示顺序的可能性。 调查购买产品时的温度变得非常必要。
由于可以使用外部 Web API 来查询天气信息,因此我们计划收集购买时的天气信息,并将其记录在后面的审核数据库中。
案例非常简单,但您需要使用“外部 Web API”来收集信息,并且需要将获得的信息和购买信息结合起来记录在数据库中。
此方法返回源代码文件名列表。可选的 cat 和 type 约束源代码文件的类型。
GET http://server:port/api/atelier/v1/namespace/docnames
GET http://server:port/api/atelier/v1/namespace/docnames/cat
GET http://server:port/api/atelier/v1/namespace/docnames/cat/type
其中
cat 指定类别代码:CLS = class; RTN = routine; CSP = CSP 文件; OTH = other。默认为 *。type 指定源代码文件类型。可以是 * 通配符或文件类型。对于 CLS,类型必须是 *。对于 RTN,类型可以是 mac、int、inc、bas 、mvi 或 mvb。对于 CSP,type 可以是 js 或 css 等文件类型的列表,以逗号分隔。默认为 *。URL 参数 'generated=1' 指定应包含生成的源代码文件。URL 参数 'filter' 提供了一个可用于匹配名称的 SQL 过滤器。本文向你推荐一些使用IRIS创建REST API应用程序的模式。
注:所有源代码在https://github.com/yurimarx/movie
首先,请看我对创建IRIS API应用程序所需类的建议:
.png)
我将创建一个电影目录应用程序来演示文章中建议的模式:
.png)
Note: 感谢IRIS API 模版应用 https://openexchange.intersystems.com/package/iris-rest-api-template . 这是本教程的基础.
1. 在你的文件系统中创建一个movie文件夹。在一个新的VSCode窗口中打开这个文件夹。
.png)
2. 在movie 文件夹中创建Dockerfile 文件来在Docker container实例中运行IRIS社区版.
开发者您好!
这里向介绍@Lorenzo Scalese的OpenAPI-Suite (一个用于从OpenAPI 3.0生成 ObjectScript 代码的工具集)。这个工具集在 2023 年 InterSystems 开发工具大赛的21 个参赛作品中获得专家提名第三名。
目前 IRIS 最高支持OpenAPI 2.0 ,但是这个工具支持 OpenAPI 3.0 !
提供的功能如下。
关于各个功能的详细介绍,请参考@Lorenzo Scales撰写的文章《 OpenAPI Suite - Part 1 》和《 OpenAPI Suite - Part 2 》。
在本文中,我尝试了 1 个功能。其中,以下的应对方案非常好。
什么是npm-iris?
NPM是“No Project Mess(项目不乱)”的缩写。
NPM是使用Intersystems IRIS和Bootstrp 4建成的项目和任务管理应用程序。
NPM的创建初衷是通过一个简单直观的项目和任务管理软件,帮助开发者和小型商业公司降低日常问题的复杂度。
它能提供不同的任务视图,包括电子表格、看板、日历,甚至甘特图!
为什么?
在不同的团队中工作,您会发现不同的人喜欢不同的工具。
所以,有时您会在一个项目中使用甘特图,在另一个项目中使用看板,在其他项目中使用纸上的列表……
NPM专注于任务。无论您和您的团队喜欢以哪种方式查看。只需单击并更改您的视图。
功能
新特性/改进的路线图
试一下这款应用程序!
http://npm-iris.eastus.cloudapp.azure.com:52773/npm/home.