Google Base Data API vs. Astoria: Two Approaches to SQL-like Queries in a RESTful Protocol


En Google Base Data API vs. Astoria: Two Approaches to SQL-like Queries in a RESTful Protocol,
Dare Obasanjo hace una comparación, entre Google Base Data y Astoria.
Me resultó interesante la lectura y algo que vamos a tener que acostumbrarnos a usar para hacer mashups y posiblemente otras cosas.

via: www.infoq.com

AVISO para EL LECTOR DESPREVENIDO: De aquí para abajo, leer SOLO si tiene tiempo para perder, no va a sacar nada en limpio.

Mi interés por este tipo de cosas, viene por el lado de la implementación de GXunit. Lo que estoy buscando alguna forma de recuperar resultados de una base de datos, pero desde un alto nivel.

Explicando un poco mejor. Una de las ideas de implementación de GXUnit, consiste en tener algunos objetos "Casos de prueba", que tenga la posibilidad de testear procedures y bussines component (en una primera etapa).

Pongamos un ejemplo:

Si tengo un procedimiento ATestear(in: &Var1, out: Var2);
tendria "algo", que me permita especificar para ese procedimiento varias "corridas" de ese procedimiento con diferentes entradas y diferentes resultados esperados.

Dentro de las entradas van a estar los parámetros entrada (in e inout) y posiblemente también algunas expresiones que ponen las tablas en estados conocidos.

Dentro de los resultados esperados, deberíamos tener parámetros de salida y ademas el estado en que deberían quedar las tablas (en valores) después de la ejecución y al expresión que use para recuperar dicho estado.

Entonces, probar el procedimiento ATestear, consistiría en algo del estilo

Inicializo en un estado conocido.
Mientras (queden corridas)
....Ejecuto ATestear con valores de parámetros de entrada
....Para cada Resultado Esperado
............Recupero Resultado real (aca uso la expresión)
............SI Resultado Esperado <> Resultado_real
........................OPSS.. rompiste algo...
............FinSi
....FinPara
FinMientras
Si no rompiste nada
.........Aplausos, medalla y beso
Endif

La duda que me viene carcomiendo mi ya bastante cascoteado cerebro son:

Pregunta 1: "Como car*jo represento el resultado esperado de una (o varias anidadas) tabla de la base de datos?"

y

Pregunta 2: "Como represento la expresión que voy a usar para recuperar el contenido de las tablas?".

A la primera pregunta, pienso que podríamos guardar un xml, con el resultado esperado, lo cual podría servir también para comparar contenido de SDTs y otros tipos de cosas que hay que comparar (archivos, imagenes, cookies, etc).

A la pregunta 2, es donde tengo mas dudas. Las opciones que he barajado son:
Sentencias SQL, que hagan los selects de la tablas que necesiten comparar y guarden los resultados en XML. Tienen de malo que estan demasiado pegadas al fierro, y que cuando cambie la estructura de las tablas van a sufrir demasiado.
Expresiones for each, que si bien son mucho mas potentes y tolerantes a cambios, es necesario crear alguna forma de ejecutarlas en forma dinámica, cosa que aun no tenemos (bueno, en realidad gxquery tiene algo, por lo que se podría utilizar algo de eso).
Data Providers. Se podría tener un DP, que recupere el resultado y me lo devuelva en un formato que sea fácil de comparar y de mostrar las diferencias a un programador para que entienda que fue lo que rompió.
Otro tipo de expresiones (acá recién entra Astoria, GDataBase, XQuery, LinQ y demás).

Bueno, basta de divagues.. en algún momento me voy a dar cuenta de que es lo que quiero... Mi cerebro algunas veces tiene esa capacidad de sorprenderme y me trae una solución sencilla.....

Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.