Obtener parámetro data

51 views
Skip to first unread message

Kisko

unread,
Dec 23, 2024, 6:59:13 AM12/23/24
to ActiveVFP
Buenos días a todos.

Recientemente estoy probando este ActiveVFP y he conseguido obtener los datos de una consulta GET cuando se realiza mediante Headers, pero no consigo obtenerlos cuando se para como parámetros.

Por ejemplo en la solicitud:

   localhost/prueba/MyGetFunction?data={"name":"prueba"}

¿Cómo consigo obtener el parámetro data?

He probado con:

    lcData = oRequest.QueryString("data")

pero me devuelve:

    Error iniciado por el usuario., at averror:3113

Muchas gracias a todos de antemano.
Saludos.
Francisco Lorente.
Murcia. España

martin bonansea

unread,
Dec 24, 2024, 7:12:24 AM12/24/24
to acti...@googlegroups.com
Hola Francisco, buen día, podes obtener mediante AVGET()
Te dejo un ejemplo de un endpoint con nombre  Productos_estudio para que pueda servir de referencia

Procedure Productos_estudio
This.OpenData()

lctipo = this.verb  && DEVUELVE EL VERBO POST, GET,ETC
lcdata = this.Params[1]
lcparam2 = ''

IF type('This.Params[2]')='U'
lcparam2 = ALLTRIM(This.Params[2])
ELSE
lcparam2 = 'Params 2'
ENDIF

nPageSize = VAL(AVGET("pagesize","1"))  && "1" es el valor por omision (opcional
nPageOffset = VAL(AVGET("pageOffset","1"))  && "1" es el valor por omision (opcional


RETURN lctipo

Saludos 

--
Has recibido este mensaje porque estás suscrito al grupo "ActiveVFP" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a activevfp+...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/activevfp/fe7cf254-653e-4961-bbc0-266900085e3fn%40googlegroups.com.

Victor Espina

unread,
Dec 24, 2024, 7:18:11 AM12/24/24
to ActiveVFP
La forma es con la funcion AVGET():

cData = AVGET("data")

Ahora, en general no es buena practica enviar strings JSON en el querystring.  Una mejor practica seria:

GET  /prueba/MyGetFunction?name=prueba

Otra forma de pasar parametros a un endpoint es mediante segments y la propiedad PARAMS:

GET /prueba/MyGetFunction/prueba

PROCEDURE MyGetFunction
    cData = THIS.Params[2].   && Params[1] es MyGetFunction

Saluos

Victor Espina

Victor Espina

unread,
Dec 24, 2024, 7:24:16 AM12/24/24
to ActiveVFP
Otra cosa con la que hay que tener cuidado es con el cache del lado del servidor.  Los requests GET son sujetos a ser cacheados, es decir, que si tu envias dos veces el mismo request GET, la 2da vez el servidor te va a responder con los mismos datos que te devolvio la primera vez (siempre y cuando el URL del request sea exactamente igual al anterior).

Esto implica que si quieres estar 100% seguro que el request se vuelve a procesar para que te devuelva data actualizada, tienes que:

a) Asegurarte que el URL del GET sea distinto cada vez.  Una forma de hacer esto es agregar un valor random en el querystring, por ejemplo:

GET /prueba/MyGetFunction?name=prueba&version=39839833

donde el valor de "version" es un numero random.

b) Usar otro verbo para invocar el endpoint, como PUT.  Los verbos POST, PUT, PATCH o DELETE no son cacheados asi que siempre se van a ejecutar aunque el URL sea exactamente igual a uno enviado anteriormente.   La otra ventaja con estos verbos es que puedes pasar data en el cuerpo mediante JSON, cosa que no es posible con un request GET.


Victor Espina


On Monday, December 23, 2024 at 8:59:13 AM UTC-3 kiska...@gmail.com wrote:

Kisko

unread,
Dec 25, 2024, 5:18:59 AM12/25/24
to ActiveVFP
OK. Muchas gracias a ambos. Tomo buena nota de tus consejos, Victor.

Por cierto, ¿por que no es aconsejable el pasar un JSON como parámetro en el querystring?

Saludos y Feliz Navidad y Año Nuevo a todos.
Francisco Lorente.
Murcia. España

Victor Espina

unread,
Jan 15, 2025, 5:37:36 PMJan 15
to ActiveVFP
Por que es un string muy largo que encima va a tener que ser codificado para que sea compatible con el URL... normalmente el querystring se usa para pasar datos tiupo param=value... no digo que sea imposible, pero la verdad yo no lo haria.

Victor Espina
Reply all
Reply to author
Forward
0 new messages