Modelo

Responder
ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Modelo

Mensaje por ramirezosvaldo »

Hola buenas tardes

Dado que coexistimos con diferentes sistemas / lenguajes / Webservers, quiero poner el modelo que estoy trabajando.

El proceso es el siguiente: Apache => Mercury => Llama a otro WebServer ( Alaska Xbase++) y dicho server regresa la información:

*****

#define HB_CURLOPT_POST 47
#define HB_CURLOPT_URL 2
#define HB_CURLOPT_DL_BUFF_SETUP 1008
#define HB_CURLOPT_HTTPHEADER 23
#define HB_CURLOPT_USERPWD 5
#define HB_CURLOPT_POSTFIELDS 15

CLASS UserModel

DATA hCurl

METHOD New() CONSTRUCTOR
METHOD Find( hData )
METHOD End()

ENDCLASS

METHOD New() CLASS UserModel

curl_global_init()

IF ! empty( ::hCurl := curl_easy_init() )

curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, 1 )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, "localhost:8080/users.prg")
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, {"Content-Type:application/json"} )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERPWD , AP_GETENV( 'MIKEY' ),"" )
else
::hCurl := NIL
ENDIF

RETU SELF

METHOD End( ) CLASS UserModel

curl_global_cleanup()

RETURN SELF


METHOD Find( hData ) CLASS UserModel

LOCAL aRows := {}
LOCAL hReturn

if ! empty( hData ) .AND. ::hCurl <> NIL

curl_easy_setopt( ::hCurl , HB_CURLOPT_POSTFIELDS, hb_jsonencode( hData))

IF curl_easy_perform( ::hCurl ) == 0
cBuffer := curl_easy_dl_buff_get( ::hCurl )
hb_jsonDecode (cBuffer, @hReturn)
aadd( aRows , hReturn )


endif

ENDIF

RETU aRows

Asi de esta manera dejo una segunda capa de seguridad para que los datos sean resueltos o devueltos por otro webserver, el cual solamente acepta entradas e un IP Fijo y único; Este webserver se encargara de accesar DBF/SQL local o remoto y devolverá los datos.

En mi caso, (ya que no uso hbnetio) use CURL;

Solo queria comentarlos.
Saludos
Osvaldo Ramirez

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 5 months

Mensaje por charly »

Osvaldo,

El concepto es parecido al que he usado yo en hbnetio, pero a detacar:

1.- Si tienes 5 metodos en la clase que van a usar todos curl, quizas tiene sentido abrir la conexion curl alli, pero yo crearia un metodo ::OpenCurl() y que cada método q necesite que lo invoque.

2.- Pensad que cada peticion entrara en el servidor, por lo que invocaras la clase y al final morira. Es por eso que el metodo End() no tiene sentido, a no ser que tambien lo invoques desde cada metodo al final de su ejecucion

En resumen, yo plantearia cada metodo de esta clase asi

Código: Seleccionar todo

METHOD Find() CLASS UserModel

	local hCurl := ::OpenCurl()
	
	Procesos con Curl...
	
	::CloseCurl( hCurl )
	
RETU aRows
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Mensaje por ramirezosvaldo »

Si, tienes razón.

Apenas lo intento structurar y me gusta tambien tu punto de vista.

Gracias Charly

Saluduos
Osvaldo Ramirez

Responder