查找

記事
· 2025年11月20日 4m read

Consumiendo API REST para principiantes (apto para novatos)

Como desarrollador que usa IRIS como base de datos en un par de proyectos, uso APIs REST todo el tiempo. En mi opinión, saber cómo consumir un recurso de una API REST es crucial para poder utilizar APIs REST externas con %Net.HttpRequest, porque permite la integración con aplicaciones y servicios web modernos, y es una habilidad esencial para un desarrollador backend que ama y utiliza IRIS como base de datos.

¿Qué es y para quién sirve %Net.HttpRequest?

Es solo una clase, pero es la forma adecuada de hacer solicitudes fuera del framework. Es una clase sencilla que proporciona métodos HTTP como GET, POST y PUT, además de otros métodos de solicitud, os permite “jugar” con los encabezados, crear la solicitud como queráis y gestionar la respuesta que recibáis. Por cada solicitud enviada usando %Net.HttpRequest, recibimos un objeto %Net.HttpResponse que contiene la respuesta con el mismo patrón.

Una forma adecuada de manejar solicitudes a APIs REST con %Net implica comprobar tanto el valor devuelto por %Status como los códigos de estado de la respuesta, lo cual os permite generar mensajes de error específicos y filtrar las respuestas cuando la solicitud falla. La forma recomendada es usar macros como $$$ISER() o $SYSTEM.Status.IsOK(). También podemos usar $SYSTEM.Status.DisplayError() para inspeccionar el código de estado HTTP y gestionarlo.

Antes de empezar a ensuciarnos las manos, debemos saber quién es JSONPlaceholder, así que en el sitio oficial dicen:

"API falsa, gratuita y fiable para pruebas y prototipos"

Y eso es exactamente lo que es: una API REST gratuita en línea para experimentar. Son datos falsos, incluso podemos enviar datos con POST, pero esta guía trata únicamente de consumir datos, así que centrémonos en eso. Y este es un ejemplo sencillo de cómo consumir un JSON desde un servicio REST API.

Set request = ##class(%Net.HttpRequest).%New()
Set request.Server = "jsonplaceholder.typicode.com"
Set status = request.Get("/posts/1")

If $$$ISERR(status) {
    Do $SYSTEM.Status.DisplayError(status)
    Quit
}

Set response = request.HttpResponse
Set httpStatus = response.StatusCode
Set body = response.Data.Read()

If httpStatus < 200 || httpStatus >= 300 {
    Write "HTTP Error: ", response.StatusLine, !
    Quit
}

Write "HTTP Status: ", response.StatusLine, !
// Do what ever you want with it!

¿Qué hacemos?

  1. Asignar “request” a una nueva instancia del objeto %New.HttpRequest.
  2. Asignar una ubicación/dirección a la propiedad Server en la instancia de request.
  3. Hacer una solicitud GET al endpoint que proporcionamos a la función “/posts/1”, lo que significa que pedimos datos de “posts” con id igual a 1 (para obtener solo el primer mensaje; podemos especificar solo “posts” y obtenerlos todos; es bueno trastear con ello).
  4. Comprobar si hay algún error en la función usando $$$ISERR con el estado devuelto por el método GET de la solicitud. Si no lo hay, la solicitud se envió correctamente desde nuestro endpoint.
  5. Asignar la variable response desde el propio objeto request.
  6. Extraer el código de estado y el cuerpo.
  7. Comprobar si el código de respuesta es OK. Si el código devuelto es mayor que 200 y menor o igual que 300, está OK (307 es una redirección, así que no es lo que necesitamos aquí).

Entonces, en perspectiva general, ¿qué estamos haciendo aquí?

  1. Crear una solicitud predefinida usando la clase
  2. Intentar consumir los datos que necesitamos
  3. Gestionar los casos tanto de error como de éxito

Si todo va bien, deberíais obtener algo así como un objeto JSON:

Y así es como consumimos datos de una API REST, pero ¿qué podemos hacer con ello?
Veamos cómo extraer los datos de la respuesta:

Set reponseBodyAsJSON = {}.%FromJSON(body)

Write "id: ", reponseBodyAsJSON.id, !
Write "title: ", reponseBodyAsJSON.title, !
Write "body: ", reponseBodyAsJSON.body, !

De esta manera, dividimos la respuesta en pares clave-valor como debe ser un JSON.
Así es como podemos acceder y consumir fácilmente un recurso de una API REST usando el método GET y la clase %Net.HttpRequest. Esta es una guía realmente apta para principiantes que os permite tener una “visión general” de cómo lo hacemos.

Aprender la magia de las APIs REST es vuestro deber.

Como este tema es muy accesible, podéis experimentar fácilmente haciendo solicitudes y probando diferentes métodos. En la próxima guía veremos cómo transferir datos de forma segura entre dos servicios basados en REST.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
InterSystems公式
· 2025年11月20日

InterSystems IRIS, InterSystems IRIS for Health, HealthShare Health Connect 2025.3 のリリースのご案内

インターシステムズは InterSystems IRIS®InterSystems IRIS® for HealthTMHealthShare® Health Connect のバージョン 2025.3 をリリースしました。
2025.3 は Continuous Delivery(CD)リリースです。
 

【リリースハイライト】
Secure Wallet(セキュアウォレット)
  IRISSECURITY データベース上に構築された、新しい暗号化フレームワークで、機密データ管理を強化し、システムのセキュリティとアクセス制御を向上しました。

拡張されたオブザーバビリティとクラウド連携
  OpenTelemetry メトリクスが強化され、新たにプロセスおよび ECP メトリクスを追加しました。さらに、ジャーナルアーカイブが Azure Blob Storage に対応し、コスト効率の高い保管が可能になりました。

データ & AI の改善
  外部テーブルで JOIN のプッシュダウンがサポートされ、SQL パフォーマンスが向上しました。ベクトル検索では高速かつ堅牢な類似検索を実現する改良版 HNSW インデックスを導入しました。

ヘルスケア機能の強化
  FHIR Bulk Data Access と認証機能が改善されました。

開発者 & UI のアップデート
  Interoperability UI に一括管理アクションや、プロダクション構成内での拡張検索機能が追加され、大規模プロダクションでも使いやすいユーザビリティを実現し、モダンなユーザー体験をさらに強化します。

より良い製品を一緒に作り上げていくために、これらの機能強化に対するフィードックを開発者コミュニティで共有してください。
 

【ドキュメント】
注目の機能についての詳細は、以下のリンクからご覧いただけます (すべて英語) :

・InterSystems IRIS 2025.3 ドキュメントリリースノート

・InterSystems IRIS for Health 2025.3 ドキュメントリリースノート

・Health Connect 2025.3 ドキュメントリリースノート

さらに、アップグレードの影響に関するチェックリストでは、このリリースにアップグレードする際に注意する必要があるすべての変更点の概要を簡単に確認できます。
 

【早期アクセス・プログラム (EAP)】
現在、多くの EAP が用意されています。このページより興味のあるものに登録してください。こちらから登録できます
 

【ソフトウェアの入手方法】
通常通り、Continuous Delivery (CD) リリースには、サポートされているすべてのプラットフォーム用のクラシックインストールパッケージと Dockerコンテナ形式のコンテナイメージが付属しています。
 

【クラシックインストールパッケージ】
インストールパッケージは、InterSystems IRIS および InterSystems IRIS for Health 用は WRC の InterSystems IRIS のページから、Health Connect 用は HealthShare  のページから入手できます。さらに、キットは評価サービスのウェブサイトにもあります。
 

【Availability と Package の情報】
このリリースには、サポートされているすべてのプラットフォーム用のクラシック・
インストール・パッケージと Docker コンテナ形式のコンテナ・イメージが付属して
います。 一覧については サポート対象プラットフォーム をご参照ください。

この Continuous Delivery のビルド番号は次のとおりです : 2025.3.0.226.0

このリリースには、InterSystems Container Registry から入手可能な Dockerコンテナ形式のコンテナ・イメージが付属しています。IRIS コンテナには "2025.3""latest-cd" の両方のタグが付けられています。

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
InterSystems公式
· 2025年11月19日

クライアントSDKを外部リポジトリから入手いただけます

コミュニティのみなさまに嬉しいお知らせです。

今年冒頭より、InterSystems IRIS, InterSystems IRIS for Health, Health Connect 向けの多くのクライアントSDKが、各外部リポジトリ (Maven, NuGet, npm, PyPI)に公開されております。これにより、ユーザのみなさまに以下のような多くのメリットがあります。

  • クライアントSDKのリリースは、InterSystems IRISのリリースサイクルと独立しており、SDKの最新版が公開されるとすぐに入手いただけます。
  • ネイティブパッケージ管理ツールを利用し、エコシステム内で依存関係としてSDKを統合できます。また業界標準の方法で依存関係を管理いただけます。
  • エンドユーザーが DBeaver などのSQLツールを通じてデータベース層へ直接アクセスする必要がある場合、SDKに直接アクセスできます。
  • InterSystems クライアントSDKをプロジェクトに直接含めることなく、依存関係のあるプロジェクトを公開できます。

これまでに公開したクライアントSDKの一覧、最新のリリースバージョン番号、および入手先は以下のとおりです。

Java

.NET

Node.js

Python

 

今後は、クライアントSDKの新バージョンがリリースされ次第、外部リポジトリに公開されます。つまり、外部リポジトリが、今後のクライアントSDKの主要な配布チャネルとなります。

クライアントSDKのご利用については https://www.intersystems.com/IERTU/ に記載されている利用規約が適用されます。 

外部リポジトリをまだご利用でない方は、ぜひお試しください。いつもどおり、みなさまからのフィードバックを心よりお待ちしております。

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
お知らせ
· 2025年11月19日

ボーナスポイント獲得状況:第3回 InterSystems Japan 技術文書ライティングコンテスト

開発者の皆さん、こんにちは!

第3回 技術文書ライティングコンテスト に応募された作品のボーナスポイント獲得状況をお知らせします📣

なお、応募は11月24日23時59分59秒まで受け付けていますので、まだまだ間に合います!💨
IRISに関連する記事であれば、どのような内容でもご応募いただけますので、ぜひチャレンジしてみてください!🔥

📣2025/11/25 応募が増えましたので表示方法変更しました。


 

記事

記事で書かれた内容を説明するビデオを公開する:4点 生成 AI 関連の記事:3点 IRIS のベクトル検索を利用した記事:3点 コードの記述が含まれる/動作するコードサンプルをGitに公開する:2点 IRIS 2025.1以降の新機能を使っている:1点 記事にわかりやすい図解/Gif アニメがある:1点

合計点

ベクトル検索のサンプルをやってみた   11
Node.jsからIRISのクラスを呼び出してみた           2
ObjectScriptで列挙体Likeなデータ型クラスを作ろう       7

 

@Kosaku Ikeda さん、 @Kyouhei.Kawanishi さん、@iinoe ueo さん、獲得ポイントのご確認よろしくお願いします!

1 Comment
ディスカッション (1)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年11月19日 3m read

使用 DATATYPE_SAMPLE 数据库测试 InterSystems IRIS 中不一致的元数据(第二部分):静默损坏

本文第一部分提供了所有背景信息。其中还包括DATATYPE_SAMPLE数据库的链接,您可以使用该链接来跟进示例。

在该部分中,我们探讨了一种易于检测的错误类型(""Access Failure【访问失败】") ,因为当尝试通过数据库驱动程序读取数据时,它会立即触发一条明确的错误消息。

本节讨论的错误更为隐蔽,也更难发现。我将它们称为"静默损坏(Silent Corruption""未检测到的数据变异(Undetected Mutation"

让我们从"静默损坏(Silent Corruption"开始:
DATATYPE_SAMPLE数据库的 "雇员(Employee "表中,有一条被故意篡改的记录可以证明这种行为--它就是ID = 110 的记录。 乍一看,甚至再看一眼,都看不出任何问题。无论是数据库驱动程序还是查询工具,都没有显示读取该记录有问题。

只有仔细观察才会发现,红色标记单元格中的值与传输(和定义)的元数据不符。

"名称Name)"列被定义为VARCHAR(50),但实际值为60 个字符

在某些情况下,这种行为不会造成任何问题——例如,当驱动程序宽松地处理这种不一致时。
但是,当下游系统依赖于所提供的元数据时,问题就会出现。如果根据这些元数据定义进行进一步处理,当实际内容与约定的接口不一致时,就可能出现错误。一个典型的例子是 ETL 工具,它通常根据元数据生成目标表或定义转换。

以下 SQL 查询可用于识别内容偏离已定义元数据的记录:

SELECT
 Name,
 CASE WHEN LENGTH(Name) > 50 THEN 1 ELSE 0 END AS Name_LENGTH_CHECK
,SSN,
 CASE WHEN LENGTH(SSN) > 50 THEN 1 ELSE 0 END AS SSN_LENGTH_CHECK
FROM SQLUser.Employee
WHERE 
      LENGTH(Name) > 50
OR    LENGTH(SSN) > 50

执行此查询后,只会返回包含错误的记录。在每一行中,如果值超过元数据定义的长度,有问题的单元格将被标记为 1

现在我们来看看下一种错误类型:"未检测到的数据变异(Undetected Mutation"。

为了演示这个问题,DATATYPE_SAMPLE数据库中包含了一条专门为说明这种行为而更改的错误记录。

问题记录是ID = 120的记录

同样,在读取这条记录时,数据库驱动程序和查询工具都不会显示问题。

在这种情况下,该值甚至看起来与元数据相匹配!该列定义为INTEGER,该行在该单元格中返回一个整数值(在本例中为:0)。

然而,这个值实际上并没有存储在数据库中!通过操作,一个字符串(STRING)值被注入到这个字段中。

SELECT
 CAST(Age AS VARCHAR(255)) AS Age,
 ISNUMERIC(CAST(Age AS VARCHAR(255))) AS Age_ISNUMERIC
FROM SQLUser.Employee
WHERE
    ISNUMERIC(CAST(Age AS VARCHAR(255))) = 0


如果执行此查询,只会返回包含元数据不一致的行。在每个结果行中,如果值无法被驱动程序解释为数值,则有问题的单元格会被标记为 0

最后的思考

这些情况凸显了看似格式良好的数据如何隐藏着微妙的不一致性——尤其是在绕过标准保障措施的遗留系统中。虽然 "访问失败(Access Failures) "很容易被发现,但"静默损坏(Silent Corruption""未检测到的数据变异(Undetected Mutation"等问题往往会被忽略,却会给下游带来严重问题,尤其是在依赖严格元数据合规性的系统中。

这里分享的DATATYPE_SAMPLE数据库和诊断查询为手动识别此类问题奠定了基础。但是面对现实,手工编写这些检查既繁琐又容易出错。

幸运的是,SQL DATA LENS(最低版本 3.22)使这一过程变得更加简单。 😉 只需单击一下,它就能为表视图存储过程(TablesViews, and Stored Procedures)生成全面的完整性检查,从而节省时间并帮助您提前发现隐藏的数据质量问题。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください