新しい投稿

検索

記事
· 2024年10月16日 5m read

Dentro de la Herramienta de gestión de bases de datos

En este artículo, nos adentraremos en el funcionamiento de una aplicación publicada en OpenExchange llamada db-management-tool que sirve como herramienta de gestión de bases de datos, explorando la arquitectura y las tecnologías que la sustentan. Comprenderemos cómo funciona la aplicación para daros una visión de su diseño, cómo gestiona bases de datos, tablas y cómo la API interactúa con los datos.

Discutiremos las tecnologías principales utilizadas, incluyendo InterSystems IRIS como la base de datos principal y Redis para la caché. Además, desglosaremos la estructura de las tablas utilizadas y explicaremos cómo el sistema maneja la creación, recuperación y manipulación de datos a través de la API REST.

Descripción general de la aplicación web

Esta aplicación está construida como una herramienta basada en la web, y consta de dos componentes principales: el backend y el frontend.

  • Backend: El backend se desarrolla utilizando Java con el framework Spring Boot. Spring Boot simplifica el proceso de desarrollo, ofreciendo una estructura robusta y escalable para manejar la lógica del lado del servidor. Para gestionar la conexión a las bases de datos, utilicé Spring Data, que se integra a la perfección con InterSystems IRIS (para la base de datos principal) y Redis (para almacenar en caché el JWT). Esta configuración facilita la programación al manejar gran parte del código repetitivo relacionado con el acceso y almacenamiento de datos.
  • Frontend: El frontend se construye utilizando Angular 17, que proporciona una interfaz de usuario dinámica y receptiva para gestionar bases de datos, tablas e interactuar con los datos. La arquitectura basada en componentes de Angular garantiza que la interfaz de usuario sea tanto mantenible como escalable a medida que la aplicación crece.

Estructura de la base de datos y flujo de trabajo

La base de datos principal de InterSystems IRIS contiene cuatro tablas clave que almacenan información crucial sobre los usuarios, sus bases de datos y las tablas que crean. Así es como funciona:

  • Tabla de Usuarios (users): Cuando un nuevo usuario se registra, su información se guarda en la tabla de users. Esta tabla lleva un registro de todos los usuarios registrados, asegurando que cada uno tenga un identificador único para gestionar sus recursos.
  • Tabla de Bases de Datos (dbs): Cuando un usuario crea una nueva base de datos, los detalles de la base de datos (como su nombre) se almacenan en la tabla dbs. Esto permite a la aplicación mantener un seguimiento de qué usuario es propietario de qué base de datos.
  • Tabla de Tokens de Base de Datos (db_tokens): Para cada nueva base de datos, se genera un token único. Este token se utiliza para autenticar las solicitudes de la API a esa base de datos específica. La duración del token (que podría ser un día, semana, mes o año) se almacena en la tabla db_tokens, asegurando que el acceso a la base de datos se gestione de forma segura a lo largo del tiempo.
  • Tabla de Tablas (tables): Cuando un usuario crea una nueva tabla dentro de una base de datos, el nombre de la tabla se guarda en la tabla de tables junto con el ID de la base de datos asociada. Esto asegura que cada tabla esté vinculada a la base de datos correcta.

 

Además de almacenar los metadatos de la tabla, el sistema crea una nueva tabla SQL dentro de InterSystems IRIS para los datos reales del usuario. Cada tabla SQL se nombra utilizando una convención de nomenclatura técnica con el prefijo table_ seguido del ID de la tabla como sufijo. Esta tabla SQL es donde se almacenarán los datos del usuario para esa tabla en particular.

 

Base de datos Redis

La base de datos Redis desempeña un papel simple en la aplicación al gestionar la autenticación de usuarios. Cuando los usuarios inician sesión en el sitio web, se generan sus tokens JWT (JSON Web Tokens) para una gestión segura de sesiones. Estos tokens se almacenan en Redis para un acceso y validación rápidos.

Redis actúa como una caché en memoria, asegurando que la autenticación de usuarios sea rápida y eficiente. Cuando los usuarios realizan solicitudes al backend, la aplicación verifica la validez de los tokens almacenados para confirmar la identidad del usuario y otorgar acceso a los recursos apropiados.

API para operaciones de tablas

Como se mencionó en el primer artículo, para interactuar con los datos almacenados en las tablas de los usuarios, la aplicación proporciona una API REST simple pero poderosa. Actualmente, la API admite cinco operaciones básicas, lo que permite a los usuarios gestionar sus datos de manera eficiente:

  1. Obtener todos los registros por condición: Recuperar registros de una tabla basándose en condiciones o filtros específicos.
  2. Obtener todos los registros: Obtener todos los registros de una tabla sin ningún filtro.
  3. Guardar: Agregar nuevos registros a una tabla.
  4. Actualizar: Modificar registros existentes en una tabla.
  5. Eliminar: Eliminar registros de una tabla.

Estos endpoints de API facilitan la realización de operaciones CRUD (Crear, Leer, Actualizar, Eliminar) sobre los datos de la tabla. En el futuro, la API se ampliará para soportar consultas personalizadas, brindando a los usuarios más flexibilidad para ejecutar operaciones de datos complejas directamente a través de la API.

Conclusión

En este artículo, exploramos el funcionamiento interno de la herramienta de gestión de bases de datos, desglosando las tecnologías del backend y del frontend, y explicando cómo funcionan las bases de datos InterSystems IRIS y Redis dentro del sistema. También analizamos cómo se gestionan los datos a través de la API, con soporte actual para operaciones CRUD básicas.

Si bien la aplicación ya ofrece un potente conjunto de características para gestionar bases de datos, tablas y registros, aún hay más por venir. Las futuras actualizaciones introducirán soporte para consultas personalizadas y otras funciones avanzadas, haciendo que la herramienta sea aún más versátil para los usuarios que buscan gestionar sus datos sin problemas.

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
記事
· 2024年10月15日 2m read

第四十八章 解决安全问题

第四十八章 解决安全问题

本主题提供信息来帮助识别 IRISSOAP 安全问题的原因。

有关与安全无关的问题的信息,请参阅 IRIS 中的 SOAP 问题故障排除。

故障排除所需的信息

要解决 SOAP 问题,通常需要以下信息:

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

[Video] Smart Data Fabric for Generative AI Readiness

Hey Community,

Watch the new video on InterSystems Developers YouTube:

⏯ Smart Data Fabric for Generative AI Readiness @ Global Summit 2024

The Data Fabric architecture has been gaining traction in the enterprise to unify data across disparate sources into coherent data services. It can be leveraged alongside the power of GenAI and large language models (LLMs) to automate data integration, provide natural language access to data and analytics, improve data quality while decreasing the need for labor-intensive data cleansing, and secure and govern data in real time. This video will explore the benefits of this approach, provide examples of how these technologies can be used in real-world scenarios, illustrate the risks, and lay out a practical path for applying this technology safely.  

🗣  Presenter: @Jeff Fried, Director, Platform Strategy, InterSystems  

Enjoy watching, and expect more videos! 👍

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

Desenvolvendo Integrações com o InterSystems IRIS - SQL Inbound Adapter

Projeto 4 – SQL Inbound Adapter

Vamos montar nossa próxima integração utilizando o adaptador SQL Inbound Adapter. Este adaptador permite acessar uma tabela externa ao IRIS e consumir seus registros.

No nosso exemplo iremos ler uma tabela via SQL externa ao IRIS através de uma conexão ODBC e armazenar as informações desejadas em uma global.

O primeiro passo é criar as mensagens da integração. Vamos criar o Request e o Response que iremos utilizar para trafegar as mensagens pelo barramento:

Class ws.global.msg.incluir.Request Extends Ens.Request
{

Parameter XMLTYPE = "incluirReq";

Property codigo As %Integer;

Property nome As %String;

}

Class ws.global.msg.incluir.Response Extends Ens.Response
{

Parameter XMLTYPE = "incluirResp";

Property status As %Boolean;

Property mensagem As %String;

Property sessionId As %Integer;

}

Note que Request tem como superclasse Ens.Request e Response tem como superclasse Ens.Response. Isso é importante para que as funcionalidades do barramento estejam disponíveis nas mensagens.

Após criar nossas mensagens de Request e Response Vamos criar nosso BS, que é quem vai consumir a tabela SQL externa:

Class ws.global.bs.Service Extends Ens.BusinessService
{

Parameter ADAPTER = "EnsLib.SQL.InboundAdapter";

Method OnProcessInput(pInput As EnsLib.SQL.Snapshot, pOutput As %RegisteredObject) As %Status
{

 Set req=##class(ws.global.msg.incluir.Request).%New()
 Set req.codigo=pInput.Get("code")
 Set req.nome=pInput.Get("name")
 Set sc=..SendRequestSync("bpGlobalIncluir",req,.pOutput)
 Quit sc
}

}

Note que nosso BS usa o adaptador EnsLib.SQL.InboundAdapter. Isso habilita nosso BS a consumir a tabela externa. Vamos precisar depois realizar algumas configurações no BS, mas faremos isso quando formos coloca-lo na produção.

Agora vamos criar nosso BO conforme abaixo:

Class ws.global.bo.Operation Extends Ens.BusinessOperation [ ProcedureBlock ]
{

Method incluir(pRequest As ws.global.msg.incluir.Request, Output pResponse As ws.global.msg.incluir.Response) As %Library.Status
{
 Set pResponse=##Class(ws.global.msg.incluir.Response).%New()
 Set ^Cliente(pRequest.codigo)=pRequest.nome
 Set pResponse.status=1
 Set pResponse.mensagem="OK"
 Set pResponse.sessionId=..%SessionId
 Quit $$$OK
}

XData MessageMap
{
<MapItems>
              <MapItem MessageType="ws.global.msg.incluir.Request">
                            <Method>incluir</Method>
              </MapItem>
</MapItems>
}

}

Aqui no BO temos a estrutura XData que recebe qual a classe que vai chegar e direciona para o método que deve tratar aquela entrada.

Note também que neste BO não estamos utilizando nenhum adaptador. Ele trabalha sem fazer chamadas externas, apenas salvando a global que queremos criar.

Agora, por fim, vamos montar nosso BP, que é o orquestrador das chamadas da integração.

 

 

Configure nosso componente CALL da seguinte forma:

 

 

O código do nosso BP ficará assim:

/// 
Class ws.global.bp.incluir.Process Extends Ens.BusinessProcessBPL [ ClassType = persistent, ProcedureBlock ]
{

/// BPL Definition
XData BPL [ XMLNamespace = "http://www.intersystems.com/bpl" ]
{
<process language='objectscript' request='ws.global.msg.incluir.Request' response='ws.global.msg.incluir.Response' height='2000' width='2000' >
<sequence xend='200' yend='350' >
<call name='boEGlobal' target='boGlobal' async='0' xpos='200' ypos='250' >
<request type='ws.global.msg.incluir.Request' >
<assign property="callrequest" value="request" action="set" languageOverride="" />
</request>
<response type='ws.global.msg.incluir.Response' >
<assign property="response" value="callresponse" action="set" languageOverride="" />
</response>
</call>
</sequence>
</process>
}

Storage Default
{
<Type>%Storage.Persistent</Type>
}

}

Vamos agora configurar o acesso ODBC. No nosso exemplo faremos um acesso ao próprio IRIS, mas poderíamos acessar qualquer banco que disponibilizasse um driver ODBC. Primeiro vamos configurar o DSN para o acesso. Vá no Windows (só lembrando que existe driver ODBC para Linux também) e execute o utiliário Fonte de Dados ODBC 64 Bits. Crie um novo DSN de Sistema e preencha as informações conforme a tela abaixo:

 

Salve e faça um teste de conexão:

 

Pronto. Temos o acesso ODBC configurado. Agora precisamos ter nossa tabela criada. Vamos utilizar o modelo a seguir:

Class ws.database.cliente Extends (%Persistent, %Populate, %XML.Adaptor)
{

Property code As %Integer(MAXVAL = 999);

Property name As %String;

}

 

Agora vamos utilizar a production que criamos no exemplo anterior e colocar as classes nela e realizar algumas configurações. A primeira será criar uma credencial para autenticação do acesso ODBC. Vamos em Interoperabilidade->Configurar->Credenciais a partir do painel de Administração do IRIS:

 

Agora crie uma nova credencial. Informe ID = super, Nome do usuário = _SYSTEM e Senha a senha do seu usuário _SYSTEM (padrão é SYS). Você pode criar um usuário para este acesso caso deseje. Estamos usando o _SYSTEM somente para facilitar o teste.

Salve a credencial e você verá uma tela como esta:

Agora vamos colocar nossos componentes na production. Clique no botão (+) ao lado do título Services e inclua o nosso BS conforme a tela abaixo:

 

 

IMPORTANTE: Deixe a caixa Habilitar agora DESMARCADA. Vamos habilitare ste componente mais tarde quando todas as etapas necessárias estiverem cumpridss.

Vamos agora complementar a configuração do BS informando o DSN e a credencial de autenticação para o ODBC. Vá na configuração do BS, opções Parâmetros Básicos e informe conforme abaixo:

 

Mantenha a caixa Habilitado desmarcada. Isso é importante conforme veremos mais à frente.

Agora, ainda na configuração do BS vá em Data e preencha conforme a seguir:

 

A caixa Consulta tem o SQL que será executado para recuperar as informações. A caixa Consulta para Exclusão tem o SQL que limpará a tabela externa dos registros já processados. Em Nome Campo Chave colocamos a coluna que servirá de identificador para a limpeza. Aqui podemos fazer diversos mecanismos diferentes, como por exemplo, alterar a linha processada colocando um flag de processamento e uma data/hora para informar que alquela linha já foi processada. Para maiores detalhes sobre o uso do SQL Inbound Adapter consulte a documentação em https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=ES...

Pronto. Nosso BS está configurado.

Agora vamos passar para o nosso BO. O processo é o mesmo, ou seja, clique no botão (+) ao lado do título Operations e preencha a tela que será apresentada:

Pronto. Nosso BO está configurado na production.

A seguir clique no botão (+) ao lado do título Process para incluir o nosso BP:

 

 

Preencha a tela conforme acima e clique em OK.

 

 

 

Temos nossos 3 componentes configurados na produção. Clique na bola verde ao lado de bpGlobalIncluir para ver as conexões entre os componentes:

 

 

Agora vamos verificar a global que receberá os dados que virão da tabela externa. Abra um terminal do IRIS e vá para nosso namespace de desenvolvimento. No cado do nosso exemplo é o INTEGRA:

 

Chame o utilitário ^%G e verifique o conteúdo da global ^Cliente:

 

Veja que a global não existe. Será nessa global que nosso BO irá colocar os registros lidos da tabela externa.

Agora abra o Painel de Administração do IRIS, vá em Explorer do Sistema->SQL e mude para o namespace INTEGRA:

 

Faça uma consulta na tabela ws_database.cliente e confirme que ela está vazia:

 

 

Agora vamos criar alguns registros na nossa tabela. Note que usamos a %Populate como uma superclasse da nossa tabela. O IRIS permite herança múltipla, ou seja, uma classe pode ter diversas superclasses:

Class ws.database.cliente Extends (%Persistent, %Populate, %XML.Adaptor)

 

Esta superclasse permite que uma tabela seja populada com dados de teste. Volte ao Terminal e execute o comando abaixo:

Do ##Class(ws.database.cliente).Populate(10)

Veja o comando na janela do terminal:

 

Volte ao SQL Explorer e verifique o conteúdo da nossa tabela:

 

Veja que foram criados 10 registros para nossa tabela. A %Populate é a responsável por isso. Para mais informações veja em https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_populate

 

Agora vamos voltar ao nosso BS e ativá-lo. Assim a integração fará a leitura dos registros que existem na tabela e criará a global ^Cliente:

 

Após marcar a caixa Habilitado clique em Aplicar e nossa integração já estará ativa.

Volte ao terminal e execute o utilitário ^%G e verifique agora a nossa global ^Cliente:

 

Veja que ela está preenchida com as informações da tabela. Volte a tabela e verifique os registros:

 

Os registros lidos foram eliminados da tabela.

 

Veja a lista de mensagens da integração:

 

E abrindo uma das mensagens vemos o trace da execução:

 

Com isso concluímos esta integração. Utilizamos em nosso teste o IRIS 2024.1 que está disponível para download na sua versão Community na internet.

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

HealthShare Unified Care Record Fundamentals – Virtual November 4-8, 2024 - Registration space available

HealthShare Unified Care Record Fundamentals – Virtual* November 4-8, 2024

*Please review the important prerequisite requirements for this class prior to  registering.

  • Learn the architecture, configuration, and management of HealthShare Unified Care Record.
  • This 5-day course teaches HealthShare Unified Care Record users and integrators the HealthShare Unified Care Record architecture and administration tasks.
  • The course also includes how to install HealthShare Unified Care Record.
  • This course is intended for HealthShare Unified Care Record developers, integrators, administrators and managers.
  • This course is applicable for users of Unified Care Record.

SELF REGISTER HERE

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