REST API que consume SQL y devuelve JSON
¡Hola desarrolladores!
A veces, cuando desarrollamos una maqueta o una Prueba de Concepto (PoC), necesitamos una interfaz sencilla que proporcione datos en IRIS en JSON contra consultas SQL.
Y recientemente contribuí con un sencillo módulo que hace exactamente eso:
acepta una sentencia SQL y devuelve JSON.
¿Cómo se instala? Solo llama:
zpm "install sql-rest"
Si lo instalas en un namespace X, configurará un endpoint /sql en tu sistema, que aceptará solicitudes POST con una sentencia SQL y te devolverá el resultado para los datos disponibles en el namespace X.
¿Cómo probarlo? Por supuesto, necesitarás algunos datos de prueba que pueden ser instalados, por ejemplo, con:
USER>zpm "install dataset-countries"
Este es el flujo de prueba completo:
$ docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2020.4.0.524.0-zpm
55f047cf0513a835bc31102c42d7ed02135ec195749d24aa1fa4905a1c64d89c
$ docker exec -it my-iris iris session IRIS
Node: 55f047cf0513, Instance: IRIS
USER>zpm "install sql-rest"
USER>zpm "install sql-rest"
[swagger-ui] Reload START
[swagger-ui] Reload SUCCESS
[swagger-ui] Module object refreshed.
[swagger-ui] Validate START
[swagger-ui] Validate SUCCESS
[swagger-ui] Compile START
[swagger-ui] Compile SUCCESS
[swagger-ui] Activate START
[swagger-ui] Configure START
[swagger-ui] Configure SUCCESS
[swagger-ui] Activate SUCCESS
[sql-rest] Reload START
[sql-rest] Reload SUCCESS
[sql-rest] Module object refreshed.
[sql-rest] Validate START
[sql-rest] Validate SUCCESS
[sql-rest] Compile START
[sql-rest] Compile SUCCESS
[sql-rest] Activate START
[sql-rest] Configure START
[sql-rest] Configure SUCCESS
[sql-rest] Activate SUCCESS
USER>zpm "install dataset-countries"
[dataset-countries] Reload START
[dataset-countries] Reload SUCCESS
[dataset-countries] Module object refreshed.
[dataset-countries] Validate START
[dataset-countries] Validate SUCCESS
[dataset-countries] Compile START
[dataset-countries] Compile SUCCESS
[dataset-countries] Activate START
[dataset-countries] Configure START
[dataset-countries] Configure SUCCESS
[dataset-countries] Activate SUCCESS
USER>zn "%SYS"
%SYS>Do ##class(Security.Users).UnExpireUserPasswords("*")
%SYS>halt
$ curl -u _SYSTEM:SYS -X POST "http://localhost:9092/sql/query" -H "accept: application/json" -H "Content-Type: application/json" -d "SELECT * FROM dc_data.Country"
<
{
"children":[
{"ID":1,"code":"AGO","name":"Angola","continent":"Africa","region":"Central Africa","surface_area":1246700,"independence_year":1975,"population":12878000,"life_expectancy":"38.3000","gnp":6648,"gnp_old":7984,"local_name":"Angola","government_form":"Republic","head_of_state":"Jose Eduardo dos Santos","capital":56,"code2":"AO"}...
Y eso es todo. Espero que os resulte útil.