1 关注者 · 991 帖子

  

InterSystems Caché 是一个多模型 DBMS 和应用服务器。

查看此处提供的更多详细信息

文档

文章 姚 鑫 · 八月 8, 2022 3m read

第二十一章 源代码文件 REST API 参考(三)

GetDocNames

此方法返回源代码文件名列表。可选的 cattype 约束源代码文件的类型。

URL

GET http://server:port/api/atelier/v1/namespace/docnames

GET http://server:port/api/atelier/v1/namespace/docnames/cat/type

其中

  • cat 指定类别代码:CLS = class; RTN = routine; ; 。默认为 。
  • 指定源代码文件类型。可以是 通配符或文件类型。对于 ,类型必须是 。对于 ,类型可以是 。对于 , 可以是 或 等文件类型的列表,以逗号分隔。默认为 。

URL Parameters

  • 参数 指定应包含生成的源代码文件。
  • 参数 提供了一个可用于匹配名称的 SQL 过滤器。

JSON Messages

以下是返回的内容,源代码文件描述符数组:

HTTP 返回码

  • 如果正常。
  • 如果发生意外错误(详细信息将在状态错误数组中)。

GetModifiedDocNames

此方法返回自数据库具有指定哈希值以来已修改的源代码文件列表。它以 JSON 数组的形式传递数据库键和哈希列表。

0
0 325
文章 Michael Lei · 八月 8, 2022 2m read

医疗行业的互操作性在改善病人护理、降低医疗服务提供者的成本以及为提供者提供更准确的情况方面发挥着重要作用。然而,由于有这么多不同的系统,数据的格式也有很多不同的方式。有许多标准被创造出来以试图解决这个问题,包括HL7v2、HL7v3和CDA,但每一种都有其缺点。

FHIR,即快速医疗互操作性资源,是一种新的医疗数据格式,旨在解决这些问题。它是由国际卫生级七组织(HL7)开发的,该组织还开发了HL7v2、HL7v3和CDA。

今天我们将探讨如何在VS代码中借助IntelliSense和自动完成功能,通过使用FHIR Schema 创建和验证FHIR资源。

第 1 步 :从FHIR 官方网站 https://www.hl7.org/fhir/下载 JSON schema file 文件用来做资源校验

第 2 步: 创建文件夹(在这个例子中,我使用病人文件夹和病人资源),并将提取的fhir.schema.json文件复制到同一文件夹,然后从VS Code中打开文件夹

第 3 步: 通过修改setting.json文件,设置VS代码以识别FHIR模式。
按CTRL+SHIFT+P并输入工作区设置JSON文件

第 4 步: 在同一文件夹中创建一个新文件patient.fhir.json。

0
0 527
文章 姚 鑫 · 八月 7, 2022 4m read

第二十章 源代码文件 REST API 参考(二)

GetMetaData

此方法返回命名数据库的 METADATA.zip 文件的二进制内容。 Atelier 使用此文件来存储索引信息,以便为将来的会话保留此信息。

URL

GET http://server:port/api/atelier/v1/%25SYS/metadata/database

注意:因为 是 URL 特殊字符,所以要指定文字 %,必须在其后跟 (百分号字符的十六进制代码)。因此,必须使用 来指定文字 。

HTTP 返回码

  • HTTP 200 如果正常。
  • 如果源代码文件不存在,则返回 HTTP 404
  • HTTP 500 如果发生意外错误(详细信息将在状态错误数组中)。

GetCSPApps

此方法返回在服务器上定义或为服务器上指定命名空间定义的 应用程序列表。

URL

其中:

指定命名空间的名称。如果未指定命名空间,则此方法返回所有命名空间的 应用程序。

注意:因为 是 特殊字符,所以要指定文字 %,必须在其后跟 (百分号字符的十六进制代码)。因此,必须使用 来指定文字 。

URL Parameters

可以传递 参数 以返回包含更详细描述应用程序的对象的数组。

JSON Messages

以下返回的内容是一个列出已定义

0
0 381
文章 姚 鑫 · 八月 6, 2022 3m read

第十九章 源代码文件 REST API 参考(一)

源代码文件 REST 接口支持以下方法:

  • GetServer:返回有关服务器的信息。
  • HeadServer:返回服务器的 HttpHeader
  • GetJobs:返回正在运行的列表。
  • GetMetaData:返回命名数据库的 文件的内容。
  • GetCSPApps:返回 应用程序列表。
  • :返回有关特定命名空间的信息。
  • :返回源代码文件名列表。
  • :返回自数据库具有指定哈希值以来已修改的源代码文件列表。
  • :保存提供的源代码文件。
  • :返回指定源代码文件的文本。
  • :删除命名的源代码文件。
  • :返回命名源代码文件的 。
  • :返回所有指定源代码文件的文本。
  • :删除命名源代码文件列表。
  • 编译:编译您指定的源代码文件。
  • 索引:返回有关指定源代码文件的摘要信息。
  • 查询:对任何表执行 查询并返回结果。
  • 搜索:在数据库中搜索源代码文件。
  • :返回用于创建作品的类的名称列表。可以指定要获取的类的类型,例如业务服务类。
  • :返回适配器的输入和输出类型。

GetServer

此方法返回有关服务器的信息,包括服务器上可用的 源代码文件 版本和名称空间。

URL

JSON Messages

{
  "status": {
    "errors": [],
    "summary": ""
  },
  "console": [],
  "result": {
    "content": {
      "version": "IRIS for Windows (x86-64) 2018.1.1 (Build 515U) Mon Feb 5 2018 08:24:13 EST",
      "id": "98E1697E-13F9-4D6A-8B73-827873D1D61C",
      "api": 2,
      "features": [
...
      ],
      "namespaces": [
        "%SYS",
        "USER"
      ]
    }
    }
}
0
0 361
问题 憨憨壹号 · 八月 6, 2022

cache的题目资源,类似于Oracle的OCP试题那种,能反应出对基础概念的掌握。

2
0 246
文章 姚 鑫 · 八月 5, 2022 3m read

第十八章 源代码文件 REST API 教程(三)

编译文件

Compile 方法编译传入 JSON 数组中名称指定的源代码文件。例如,要编译 xyz.mac,请发布以下内容:

http://localhost:52773/api/atelier/v1/INVENTORY/action/compile

使用以下 消息:

["xyz.mac"]

该方法返回:

{
  "status": {
    "errors": [],
    "summary": ""
  },
  "console": [
    "",
    "Compilation started on 08/14/2016 15:25:20 with qualifiers 'cuk'",
    "xyz.int is up to date. Compile of this item skipped.",
    "Compilation finished successfully in 0.008s."
  ],
  "result": {
    "content": []
  }
}

对于一些源代码文件,例如类, 在返回的内容中返回存储信息。

删除文件

DeleteDoc 方法删除 中指定的文件。 方法与

0
0 126
文章 姚 鑫 · 八月 4, 2022 3m read

第十七章 源代码文件 REST API 教程(二)

获取在命名空间中定义的源代码文件

要获取有关命名空间中源代码文件的信息:

  • 首先,使用 GetDocNames 方法获取文件的名称。
  • 然后用GetDoc 方法获取一个文件的内容,也可以用GetDocs 方法获取多个文件的内容。
  • 如果要提高应用程序的网络效率,可以保留源代码文件的名称和内容的本地缓存,并使用 GetModifiedDocNames 方法仅获取内容发生变化的源代码文件的名称或使用带有 标头的 GetDoc 方法。

方法返回映射到命名空间的所有数据库中的所有源代码文件的名称。

{
  "status": {
    "errors": [],
    "summary": ""
  },
  "console": [],
  "result": {
    "content": [
      {
        "name": "%Api.DocDB.cls",
        "cat": "CLS",
        "ts": "2016-08-03 20:01:42.000",
        "upd": true,
        "db": "IRISLIB",
        "gen": false
      },
      ...
      {
        "name": "EnsProfile.mac",
        "cat": "RTN",
        "ts": "2003-09-19 13:53:31.000",
        "upd": true,
        "db": "INVENTORYR",
        "gen": false
      },
      ...
      {
        "name": "xyz.mac",
        "cat": "RTN",
        "ts": "2016-08-11 15:05:02.167",
        "upd": false,
        "db": "INVENTORYR",
        "gen": false
      }
    ]
  }
}
0
0 144
文章 姚 鑫 · 八月 3, 2022 3m read

第十六章 源代码文件 REST API 教程(一)

本章提供了一个简短的教程,通过一系列示例演示如何使用源代码文件 REST API。它包含以下部分:

API 基础

Atelier 用于访问 IRIS 源代码文件的 API 使用 架构风格。 的名字来源于“Representational State Transfer”。与许多 一样 源代码文件 使用 、、、 和 方法,并将 用于传入和传出消息体。

要调用 方法,需要了解以下内容:

  • HTTP 方法——它是以下之一:GETPOST、、 或 。
  • 标头——为调用提供上下文信息。此 中使用的 包括:
    • 授权,它提供对服务器的访问。除非安装了具有最低安全性的服务器,否则需要提供用户名和密码才能访问 API。
    • Content-Type application/json,指定入站负载以 JSON 格式提供。必须为所有 POST 和 方法指定此标头。
    • ,它允许 或 PutDoc 调用检查源代码文件自上次访问以来是否被修改。
  • - 由以下部分组成:
    • ——在本章中,我们假设 在本地服务器上运行并使用端口 。
    • ——这是由具有 调度类的 应用程序定义的。
    • 标识方法和目标的 部分。
0
0 274
文章 姚 鑫 · 八月 2, 2022 3m read

第十五章 源代码文件 REST API 简介

源代码文件 REST API 简介

REST API 提供对源代码文件的访问。我们开发此 API 是为了允许 Atelier(我们基于 的 )访问 服务器上的 代码文件。可以使用 执行访问 代码文件所需的操作。这些行动包括:

  • 获取 IRIS 实例上可用的命名空间
  • 查找命名空间中定义的类定义和例程
  • 获取类和例程的文本定义
  • 更新类定义或例程
  • 创建新的类定义或例程
  • 删除类定义或例程
  • 编译 IRIS 类或例程
  • 通过对表执行 查询来发现 环境的属性

这些操作提供了访问 IRIS 源代码文件的机制。为了创建 开发环境,应该了解此 API 并全面了解 源代码文件如何在 中使用。

这是一个特殊用途的 。如果正在创建开发环境或处理类似的应用程序,例如类浏览器,可能会发现此 很有用。但是,它不是用于访问 IRIS 对象的通用 。

本文档描述了 源代码文件 的版本 和 。 的未来版本可能支持此 的更高版本,提供额外的调用,但将始终能够调用早期版本。版本 的 在 中包含 ,版本 的 包含 。可以通过调用 方法找出 提供的此 的版本。

下面介绍 的主要功能以及提供这些功能的方法:

  • 获取有关服务器环境的信息:

    • GetServer 方法提供有关服务器的重要信息,包括服务器上的命名空间。
    • GetNamespace
0
0 127
文章 姚 鑫 · 八月 1, 2022 4m read

第十四章 手动创建 REST 服务(二)

指定数据格式

可以定义 REST 服务以处理不同格式的数据,例如 JSONXML、文本或 。 调用可以通过在 请求中指定 元素来指定它期望发送的数据的形式,并且可以通过在 请求中指定 元素来请求返回数据格式。

在 示例中, 方法检查 REST 调用是否使用以下内容请求 数据:

If $Get(%request.CgiEnvs("HTTP_ACCEPT"))="application/json"

本地化 服务

服务返回的任何字符串值都可以本地化,以便服务器以不同语言存储多个版本的字符串。然后,当服务接收到包含 HTTP 标头的 请求时,服务会使用相应版本的字符串进行响应。

本地化 服务:

  1. 在实现代码中,不要包含硬编码的文字字符串,而是使用 $$$Text 宏的实例,为宏参数提供如下值:
  • 默认字符串
0
0 88
文章 姚 鑫 · 七月 31, 2022 8m read

第十三章 手动创建 REST 服务(一)

本附录描述了如何通过继承 %CSP.REST 类来手动创建 REST 服务;此过程创建了一个手动编码的 REST 服务,它不能与所有 管理工具一起使用。

手动创建 服务的基础知识

要手动定义 服务,请执行以下操作:

  • 创建一个 REST 服务类 — %CSP.REST 的子类。在子类中:
    • 定义一个 URL 映射,该映射指定为 REST URLHTTP 方法执行的 方法。
    • 可以选择指定 参数。此参数控制每个 调用是在其自己的 Web 会话下执行还是与其他 调用共享一个会话。
    • (可选)覆盖错误处理方法。

如果想将实现代码与调度代码分开,可以在单独的类中定义实现 REST 服务的方法,并从 URL 映射中调用这些方法。

  • 定义一个使用 服务类作为其调度类的 应用程序。

要定义 应用程序及其安全性,请转至 应用程序页面(单击System Administration > Security > Applications > Web Applications)。

定义 应用程序时,将 设置为 REST 服务类的名称。

此外,将应用程序的名称指定为 调用的 的第一部分。示例名称为 或 ,但可以指定 中允许的任何文本。

可以在一个命名空间中定义多个 服务类。每个拥有自己入口点的 服务类都必须拥有自己的

0
0 118
文章 姚 鑫 · 七月 30, 2022 3m read

第十二章 使用中的 OpenAPI 属性

本附录列出了 API 管理工具在生成 REST 服务类时使用的 OpenAPI 2.0 规范的属性。此处未列出的属性将被忽略。有几个扩展属性;它们的名称以 x-ISC 开头。

  • basePath

  • consumes

  • host

  • (请注意, 管理工具在生成代码时不使用 对象的任何属性)

  • (for details, see “Parameter Object”)

  • (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

Info Object

  • title

  • x-ISC_RequiredResource

0
0 203
文章 姚 鑫 · 七月 29, 2022 2m read

第十一章 /api/mgmnt/ API 参考

此参考列出了 /api/mgmnt/ 服务中的端点,所有这些端点都适用于较新的 REST 服务。下表总结了端点并指出它们是否也适用于手动编码的 REST 服务。

Endpoint Summary Applies to NEWER REST Services? Applies to Manually-Coded REST Services?
DELETE /api/mgmnt/v2/:ns/:app 删除 REST 服务 YES no
GET /api/mgmnt/ 列出此服务器上启用 RESTWeb 应用程序 YES YES
GET /api/mgmnt/v1/:ns/restapps 列出命名空间中启用 REST 的 应用程序 YES YES
GET /api/mgmnt/v1/:ns/spec/:app 返回 REST 服务的 规范 no YES
0
0 84
文章 姚 鑫 · 七月 28, 2022 4m read

第十章 发现和记录 REST API

本章讨论如何发现实例上可用的 REST 服务以及如何为 REST 服务生成文档。

使用 /api/mgmnt 服务发现 服务

/api/mgmnt 服务包括可用于发现 服务类和启用 REST 的 应用程序的调用。

发现 服务

要使用 服务来发现实例上可用的 REST 服务,请使用以下 调用:

  • 对于 HTTP 操作,选择或指定 GET
  • 对于 ,请指定以下形式的 :
http://localhost:52773/api/mgmnt/v2/

或者,如果只想检查一个命名空间:

http://localhost:52773/api/mgmnt/v2/:namespace

其中 是服务器的名称, 是运行 的 服务器端口,命名空间是要检查的命名空间。

(请注意,这些调用会忽略手动编码的 服务。要发现手动编码的 应用程序,请使用调用 和 。)

如果调用成功, 以 格式返回一个列出 服务的数组。例如:

[
  {
    "name": "%Api.Mgmnt.v2",
    "webApplications": "/api/mgmnt",
    "dispatchClass": "%Api.Mgmnt.v2.disp",
    "namespace": "%SYS",
    "swaggerSpec": "/api/mgmnt/v2/%25SYS/%Api.Mgmnt.v2"
  },
  {
    "name": "myapp",
    "webApplications": "/api/myapp",
    "dispatchClass": "myapp.disp",
    "namespace": "USER",
    "swaggerSpec": "/api/mgmnt/v2/USER/myapp"
  }
]
0
0 147
文章 姚 鑫 · 七月 27, 2022 3m read

第九章 REST 服务安全

如果 REST 服务正在访问机密数据,应该对服务使用身份验证。如果需要为不同的用户提供不同级别的访问权限,还要指定端点所需的权限。

REST 服务设置身份验证

可以对 IRIS REST 服务使用以下任何形式的身份验证:

  • HTTP 身份验证标头 — 这是 REST 服务的推荐身份验证形式。
  • Web 会话身份验证 — 其中用户名和密码在 URL 中的问号后面指定。
  • 身份验证 - 请参阅以下小节。

应用程序和

要通过 OAuth 2.0 对 应用程序进行身份验证,请执行以下所有操作:

  • 将包含 REST 应用程序的资源服务器配置为 OAuth 2.0 资源服务器。
  • 允许对 进行委派身份验证。
  • 确保将 应用程序(用于 应用程序)配置为使用委托身份验证。
  • 在 命名空间中创建一个名为 的例程。 提供了一个示例例程 ,可以复制和修改它。此例程是 GitHub (https://github.com/intersystems/Samples-Security) 上 Samples-Security 示例的一部分。可以按照“下载用于 IRIS 的示例”中的说明下载整个示例,但在 上打开例程并复制其内容可能更方便。

在例程中,修改 的值并根据需要进行其他更改。

指定使用

0
0 134
文章 姚 鑫 · 七月 25, 2022 6m read

第七章 在 REST 服务中支持 CORS

概述

本节提供 CORS 的概述以及如何在 IRIS REST 服务中启用 CORS 的概述。

CORS 简介

跨域资源共享 () 允许在另一个域中运行的脚本访问服务。

通常,当浏览器从一个域运行脚本时,它允许对同一个域进行 调用,但在对另一个域进行调用时不允许它们。此浏览器行为限制某人创建可滥用机密数据的恶意脚本。恶意脚本可能允许用户使用授予用户的权限访问另一个域中的信息,但随后在用户不知道的情况下,将机密信息用于其他用途。为了避免这种安全问题,浏览器一般不允许这种跨域调用。

在不使用跨域资源共享 (CORS) 的情况下,具有访问 REST 服务的脚本的网页通常必须与提供 服务的服务器位于同一域中。在某些环境中,将带有脚本的网页与提供 REST 服务的服务器放在不同的域中是很有用的。 支持这种安排。

下面提供了浏览器如何使用 处理 的简化描述:

  1. DomOne 中的网页中的脚本包含对 DomTwo 域中的IRIS REST 服务的 。 具有 的自定义标头。
  2. 用户查看此网页并运行脚本。用户的浏览器检测到与包含网页的域不同的域的 。
  3. 用户的浏览器向 服务发送一个特殊请求,该请求指示 的 请求方法和原始网页的域,在本示例中为 。
  4. 如果请求被允许,则响应包含请求的信息。否则,响应仅包含指示
0
0 128
文章 姚 鑫 · 七月 24, 2022 2m read

第六章 修改规范(SPEC)类

概述

下表列出了修改规范类的原因并简要总结了所需的更改:

原因 改变
更新或替换规范 手动修改 OpenAPI XData 块或通过重新生成规范类。
启用 REST 服务以支持 CORS 手动修改 OpenAPI XData 块;还添加一个类参数并创建一个自定义调度超类。
启用 服务以支持 Web 会话 添加类参数。
指定使用端点所需的权限 手动修改 OpenAPI XData 块。
覆盖默认内容类型、响应字符集或输入流处理 添加类参数。
为服务方法指定一个非默认名称 手动修改 块。

无论何时编译规范类,编译器都会在同一个包中重新生成调度类并更新实现类。

覆盖内容类型、响应字符集或输入流处理

只需将类参数添加到规范类并重新编译,就可以覆盖 REST 服务的几个关键方面。

  • 默认情况下,REST 服务需要 application/json 内容类型。要覆盖它,请将以下内容添加到规范类:
Parameter CONTENTTYPE = "some-content-type";

其中 some-content-typeMIME 内容类型。

  • 默认情况下, 服务的响应消息采用 格式。要覆盖它,请将以下内容添加到规范类:
Parameter CHARSET = "some-character-set";
0
0 147
文章 姚 鑫 · 七月 23, 2022 2m read

第五章 修改实现(IMPL)类

本章讨论如何修改 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 ..%SetStatusCode(<HTTP_status_code>)
    //Do ..%SetHeader(<name>,<value>)
    //Quit (Place response here) ; response may be a string, stream or dynamic object
}
0
0 139
文章 姚 鑫 · 七月 22, 2022 3m read

第四章 使用 %REST.API 类创建 REST 服务

本章介绍如何使用 %REST.API 类来创建、更新和删除 REST 服务。

使用 %REST.API 类创建或更新 REST 服务

创建 REST 服务的推荐方法是从 服务的 OpenAPI 2.0 规范开始,并使用它来生成 服务类。要使用 类执行此操作:

  1. 获取 REST 服务的 OpenAPI 2.0 规范,采用 格式,并将规范保存为文件。该文件必须是 编码的。
  2. 在要定义 服务的命名空间中,使用该文件创建 的实例。
  3. 然后调用 类的 方法。此方法具有以下签名:
classmethod CreateApplication(applicationName As %String, 
                              swagger As %DynamicObject = "", 
                              ByRef features, 
                              Output newApplication As %Boolean, 
                              Output internalError As %Boolean) 
                              as %Status
0
0 159
文章 姚 鑫 · 七月 21, 2022 3m read

第三章 使用 ^%REST 例程创建 REST 服务

本章介绍如何使用 ^%REST 例程创建和删除 REST 服务。

提示:还可以使用此例程更新REST服务;只需删除服务,然后重新创建它。

使用^%REST例程

^%REST例程是一个简单的命令行界面。在任何提示下,可以输入以下答案:

  • ^ - 使例程跳回上一个问题。
  • ? - 使例程显示一条列出所有当前选项的消息。
  • q或 - 结束例程。

此外,每个问题都会在括号中显示该问题的默认答案。

使用例程创建服务

创建REST服务的推荐方法是从服务的规范开始,并使用该规范生成服务类。要使用例程执行此操作:

  1. 获取JSON格式的服务的规范。将规范另存为文件或记下可访问规范的URL。
  2. 在终端中,更改到要在其中定义服务的名称空间。
  3. 输入以下命令以启动例程:
  1. 在第一个提示符处,输入 REST 服务的名称。该名称用作生成类的包名;使用有效的包名。如果想使用名称列表、l、 或 (在任何情况下都是变体),请将名称用双引号括起来。例如:
  2. 在下一个提示符处,输入 (不区分大小写)以确认您要创建此服务。

然后,该例程会提示输入要使用的 规范的位置。输入完整路径名或 URL

  1. 在下一个提示符处,输入 (不区分大小写)以确认要使用此规范。

该例程在此命名空间中的指定包内创建、 和 类。然后该例程显示如下输出:

接下来,例程会询问否还想创建一个 应用程序。将使用此

0
0 104
文章 姚 鑫 · 七月 20, 2022 4m read

第二章 使用 /api/mgmnt/ 服务

本章介绍如何使用 /api/mgmnt 服务来创建、更新和删除 REST 服务。

/api/mgmnt 服务还提供了可用于发现和记录 服务的选项,如本书后面所述。

使用 /api/mgmnt 服务创建 REST 服务

创建 REST 服务的推荐方法是为 服务创建 OpenAPI 2.0(也称为 )描述,并使用它来生成 服务类。如果您正在实现由第三方定义的 服务,他们可能会提供此 描述。有关 描述格式的详细信息,请参阅 规范。以下主题描述了如何使用 服务来执行此操作。

使用 /api/mgmnt 服务生成类

第一步,生成 服务类,如下所示:

  1. JSON 格式创建或获取 REST 服务的 描述。
  2. 获取 测试工具,例如 (https://www.getpostman.com/)。
  3. 在测试工具中,创建如下 请求消息:
  • 对于 操作,选择或指定 POST
  • 对于 ,请指定以下形式的 :

其中 是服务器的名称,52773 是运行 的 服务器端口, 是要在其中创建 服务的名称空间, 是要在其中创建类的包的名称.

  • 对于请求正文,以 格式粘贴
0
0 145
文章 姚 鑫 · 七月 19, 2022 8m read

第一章 创建 REST 服务简介

本文介绍 IRIS® 中的 RESTREST 服务。

REST 简介

命名自,具有以下属性:

  • REST 是一种架构风格,而不是一种格式。尽管 REST 经常使用 HTTP 来传输消息并使用 来传递数据,但也可以将数据作为 或纯文本传递。 利用现有的 标准,例如 、、 和 。
  • 是面向资源的。通常,资源由 标识并使用基于 HTTP 方法的操作,例如 、、 和 。
  • 通常有少量开销。虽然它可以使用 来描述数据,但它更常用的是 ,它是一种轻量级的数据包装器。 JSON 使用标签标识数据,但标签没有在正式的模式定义中指定,也没有明确的数据类型。

REST 服务简介

在 及更高版本中定义 接口有两种方法:

  • 规范优先定义——首先创建一个 规范,然后使用 管理工具生成 REST 接口的代码。
  • 手动编码 接口。

使用规范优先的定义, 服务正式由以下组件组成:

  • 规范类( 的子类)。此类包含 服务的 规范。 支持可以在规范中使用的几个扩展属性。
  • 调度类( 的子类)。该类负责接收请求并调用实现类中合适的方法。
  • 一个实现类( 的子类)。此类定义实现 调用的方法。

管理工具生成实现类的存根版本,然后可以扩展它以包含必要的应用程序逻辑。 (逻辑当然可以调用此类之外的代码。)

类提供了可以调用的方法,以便设置 HTTP

0
0 142
问题 Michael Lei · 五月 5, 2021

大家好,

我想知道是否有可能获取自身的值来运行查询。

我想创建一些查询以在%Persistent类中找到一个值,但是每个查询都使用不同的值。

Class Kurro.MyClass Extends %Persistent
{

/// Key of process
Property KeyProcess As %String(MAXLEN = "");

/// Specialist
Property CodeSpecialist As %String;

/// Provider
Property CodeProvider As %String;

/// Center
Property CodeCenter As %String;

/// Date
Property Date As %TimeStamp;

/// IdList
Property IdList As %String;

/// IdProcess
Property IdProcess As %String;

/// Duration
Property Duration As %String;

Query GetInfo(pObject AS Kurro.MyClass) As %SQLQuery(CONTAINID = 1, ROWSPEC = "IdList:%String,IdProcess:%String,Duration:%String")
{
    SELECT IdList, IdProcess, Duration
    FROM Kurro.MyClass
    WHERE KeyProcess = :pObject.KeyProcess
    AND CodeSpecialist = :pObject.CodeSpecialist
    AND CodeProvider = :pObject.CodeProvider
    AND CodeCenter = :pObject.CodeCenter
    AND Date = :pObject.Date
}

}
1
0 643
问题 Michael Lei · 五月 10, 2021

我想安装Windows版本的管理门户引擎来创建Cache InterSystems数据库
我想为Cache InterSystems创建一个样本数据库,并想通过Cache Entity Framework Provider访问它。但是,我无法找到一个特定的管理门户引擎来创建数据库。

你能指导一下如何在Windows中安装管理门户吗?

I want to install Management Portal Engine for Windows to create Cache InterSystems DB

I want to create a Sample Database for Cache InterSystems and want to access it via Cache Entity Framework Provider. But, I cannot find a particular engine of Management Portal to create a database. 

Can you guide how to install Management Portal in Windows?

2
0 250
问题 Michael Lei · 五月 10, 2021

大家好,

我需要根据用户请求删除Ensemble接口。我想为此编写一个程序,执行的时候将通过代码删除接口组件。
能否提供以下操作的代码示例?

  • 从规则类中删除单个规则
  • 从Ensemble删除一个类
  • 从生产环境中删除主机(服务/操作/流程)。

感谢帮助。
谢谢,

普鲁索他曼

Ensemble Delete Individual Rules and Ensemble classes programmatically
Hi Team,

I have a requirement to delete the Ensemble interfaces , as per User request. I would like to write a routine for that and once I execute, it should remove the interface components through code.
Could you please provide code samples for the following actions ?

1
0 232
问题 Michael Lei · 五月 18, 2021

大家好,

我目前正在开发TCP入站服务,以读取从使用EnsLib.TCP.CountedOutboundAdapter的TCP操作发送的一些XML。

1)我尝试过EnsLib.TCP.Inbound适配器,但是会出现此错误:

错误<Ens> ErrException:<METHOD不存在> zinitConfig + 7 ^ Ens.Host.1 *%New,EnsLib.TCP.InboundAdapter-登录为'-'
数字 - @'
设置..Adapter = $ classmethod(..#ADAPTER,“%New”)'

因此,适配器无法开始侦听传入的连接。

2)当我改用EnsLib.TCP.CountedXMLInboundAdapter或EnsLib.TCP.CountedInboundAdapter时,适配器开始侦听给定的端口,但OnProcessinput()方法未在pInput流中接收任何数据。流始终为空,并在事件日志中引发此错误。

错误<Ens> ErrTCPReadBlockSize:超时时间为(5)的TCP Read(32000)失败,错误如下:(1144):l version =“ 1.0” encoding =“ UTF-8”?

1
0 246
问题 Michael Lei · 五月 18, 2021

我可以从AIX命令行提示符运行以下命令,而不会出现任何问题

-bash-2.05b$ echo t
t
-bash-2.05b$ echo œ
œ

当我从内部Cache调用时,我遇到了问题。

USER>D $ZF(-1,"echo t")
t

USER>D $ZF(-1,"echo œ")

D $ZF(-1,"echo œ")
^
<TRANSLATE>

我正在使用Cache 2017.2。有人可以帮忙吗?

谢谢你。

1
0 228
问题 Michael Lei · 四月 29, 2022

我想知道是否有更好的方法来使用动态SQL对数据集进行分页,而不是我下面使用的方法。问题是,当潜在的数据池变大时,这段代码就会变慢,以至于无法使用。在分析下面的每一行代码时,似乎速度变慢与最初的rset.%Next()迭代有关。 有没有什么不需要子查询/%VID的可用方法,比如简单的LIMIT/OFFSET?

我的代码类似于:

s sql=##class(%SQL.Statement).%New()

s query="SELECT *,%VID FROM (SELECT prop FROM table WHERE prop=x) WHERE %VID BETWEEN 1 AND 100"             

s sc=sql.%Prepare(query)

s rset=sql.%Execute()

while rset.%Next() {.....

1
1 581