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
Modelo
- charly
- Mensajes: 145
- Registered for: 3 years 7 months
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
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
Charly
"...programar es fácil, hacer programas es difícil..."
https://httpd2.blogspot.com/
https://forum.modharbour.app
-
- Mensajes: 127
- Registered for: 3 years 6 months
Si, tienes razón.
Apenas lo intento structurar y me gusta tambien tu punto de vista.
Gracias Charly
Saluduos
Osvaldo Ramirez
Apenas lo intento structurar y me gusta tambien tu punto de vista.
Gracias Charly
Saluduos
Osvaldo Ramirez