Buenas
Estoy construyendo una aplicación para demostrar el uso de las comunicaciones al estilo de una API Rest mediante Requests y Responses usando JSON. Se compone de un backend en el servidor mediante CGI que recibe "requests", se loguea al usuario, realiza consultas a la base de datos y devuelve "responses" a la otra aplicación de escritorio que hace de frontend.
De momento va funcionando bastante bien, pero la forma idónea de tratar con los datos en JSON tras viajar por Internet, es construirlos y deconstruirlos mediante el uso de Collection, colecciones de datos que son objetos en sí mismos, arrays de objetos, etc.
Pues bien, tengo una colección que se compone de un primer objeto (que solo me interesa para saber que la consulta ha tenido éxito) y el segundo objeto que es un array de colecciones de datos, en este caso de los usuarios dados de alta en el sistema. Lo que quiero es crear una clase que coja un array de colecciones y me lo muestre en un gridview usando el evento Data.
Os muestro el contenido -ficticio- del JSON que luego se convierte en un objeto Variant[] (array de Collection):
Código:
{
"status": true,
"users": [
{
"idx": 1,
"name": "jguardon",
"psswd": "9EEA5E027AB93EC1DA",
"perm": 1,
"active": 1,
"expires": null,
"wrkgrp": null,
"phone": null,
"email": "unmail@fdfd.es",
"lastlogin": "05/05/2024 14:57:17",
"currentsession": "46.26.157.55:A507054AF954F807B685081D",
"added_by": null
},
{
"idx": 11,
"name": "tincho",
"psswd": "79B48CB1E208A82",
"perm": 2,
"active": 1,
"expires": null,
"wrkgrp": null,
"phone": "555 222 333",
"email": "otromail@teertte.com",
"lastlogin": "05/05/2024 15:01:16",
"currentsession": "46.26.157.55:0824D9EC6D2FD2D3EB7AA0A2",
"added_by": "jguardon"
},
{
"idx": 12,
"name": "terco",
"psswd": "A44E76B7D61BFFA1",
"perm": 2,
"active": 1,
"expires": null,
"wrkgrp": null,
"phone": "46455822",
"email": "mimail@nomail.org",
"lastlogin": "05/04/2024 16:40:35",
"currentsession": "192.168.0.131:CD73FA57C9ED2F3A8D8EE128",
"added_by": "jguardon"
},
{
"idx": 13,
"name": "jesusg",
"psswd": "my-super-secure-password",
"perm": 2,
"active": 1,
"expires": null,
"wrkgrp": null,
"phone": "5684 05 4053",
"email": "abcde@fghi.jk",
"lastlogin": null,
"currentsession": "",
"added_by": "jguardon"
}
]
}
Mediante este código es muy fácil convertirlo en objetos de gambas3. De hecho se usa todo el rato Json.Decode() y JSON.Encode() para transicionar de json a colecciones y viceversa:
Código:
Dim cResp as New Collection
cResp = JSON.Decode(CR.getResponse())
If cResp["status"] = True Then
' hacer algo con cResp["users"]
' para visualizarlo en un gridview
Endif
Esos datos en JSON provienen de la base de datos en el servidor. 'idx' es el índice y clave primaria autoincrement, pero sabemos que tras borrar e insertar nunca van a ser consecutivos, por lo que no se pueden iterar usando ese índice.
Por cierto, si alguien quiere "bichear" la aplicación del servidor CGI, la tengo en GitLab, está un poco chapucera, no controla posibles errores y es muy simple, pero es parte de mi propio aprendizaje en el mundo de Gambas CGI. Se puede depurar en el IDE usando el navegador incrustado (que no va mostrar nada porque no va por ahí el JSON) o montarlo en un servidor Apache, Lighttpd o el que más os guste. Yo lo tengo en Lighttpd que es muy ligero y rápido.
https://gitlab.com/jguardon/gambas-cgi-test
La aplicación de escritorio aún no la tengo subida a GitLab, estoy esperando a que al menos funcione el poder mostrar datos en el gridview.
A partir de aquí se abre un mundo de posibilidades para crear aplicaciones profesionales basadas en "la nube", un servidor o como queráis decirle... pero eso sí, siempre usando conexiones seguras SSL.
Saludos y espero vuestros comentarios.