Foros del Web » Programando para Internet » PHP »

Servicio web REST

Estas en el tema de Servicio web REST en el foro de PHP en Foros del Web. Hola a todos Alguien sabria decirme como devuelve un servicio web la informacion al cliente que la ha solicitado?? Estuve revisando algunos tutoriales y en ...
  #1 (permalink)  
Antiguo 21/04/2010, 19:08
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Servicio web REST

Hola a todos


Alguien sabria decirme como devuelve un servicio web la informacion al cliente que la ha solicitado?? Estuve revisando algunos tutoriales y en casi todos devuelve la respuesta, ya sea en formato XML o JSON usando el metodo echo...

Pero con eso el cliente no puede acceder a la informacion, tan solo visualizarla en su navegador, si por ejemplo quisiera saber cual es un valor concreto para almacenarlo en una base de datos ¿Como deberia devolver la informacion el Servicio web?

Saludos
  #2 (permalink)  
Antiguo 21/04/2010, 19:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Servicio web REST

La idea es que un servicio Web REST regrese en formato XML o JSON para que tu desde tu código puedas parsear ese JSON o ese XML y extraer los datos que necesites.

No es para que el cliente final vea la estructura, si no que tu como programador parsees esa informacion.

Saludos
  #3 (permalink)  
Antiguo 22/04/2010, 07:43
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

Creo que no te he entendido bien.

Se supone que el servivio web ofrece servicio a una aplicacion, la cual yo llamo cliente. Pero la informacion que el servicio web devuelve tiene que ser accedida de alguna forma por el clinete ¿no es asi?.

Por ejemplo yo accedi a un servicio web re geocoding de Googlemaps para ver en que coordenadas esta una direccion fisica introducia. C/Menendez valdez, nº 5. Y el servicio web m devolvio unos datos en JSON, yo los parsee y me quedo esa informacion en un array, accedi a una determinada posicion del array y alli tenia tanto la longitud como la latitud.

Es decir mi aplicacion envio una direccion fisica y recibio un obejto JSON del cual saco informacion.

Yo querria saber como puede devolver el servicio web esa informacion para que mi aplicacion pudiera interpretarla.

Saludos
  #4 (permalink)  
Antiguo 22/04/2010, 08:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Servicio web REST

Por eso esa es la idea del servicio Web REST que te regrese la informacion en XML o JSON para que tu hagas ese parsing en tu cliente.
  #5 (permalink)  
Antiguo 22/04/2010, 09:40
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

Ah ok. Pero mi pregunta es como debe devolver la informacion el servicio web, ¿mediante que metodo quiero ? decir, para que luego el cliente pueda hacer ese parsing.

Porque con el metodo echo no funciona

Muchas gracias y saludos
  #6 (permalink)  
Antiguo 22/04/2010, 09:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Servicio web REST

Cita:
Iniciado por Nacho_astur Ver Mensaje
[...] Porque con el metodo echo no funciona [...]
y porque no??

que tipo de dato imprimes??

¿que tipo de dato espera tu aplicación cliente??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 22/04/2010, 09:50
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

Hola

El tipo de dato que devuelve mi servicio web es un array, encoded en JSON.

No es que no funcione el metodo echo o print_r, el problema es que si utilizo dicho metodo unicamente aparece en el navegador, es decir el cliente ve la informacion que ha solicitado. Imaginate quieres saber el cliente la situacion de un hotel, pues el servicio web le devuelve dicha informacion y el cliente puede visualizarla perfectamente en su navegador gracias al echo o al print_r.

Pero ahora imaginate que el cliente no quiere ver unicamente la informacion, sino que tambien quiere almacenarla en una base de datos, por tanto tiene que poder acceder a la respuesta del servicio web, no solo verla en la pantalla de su ordenador a traves del navegador.

Yo no se como acceder a la informacion que devuelve al echo desde mi pagina cliente

Saludos y gracias por ayudare
  #8 (permalink)  
Antiguo 22/04/2010, 09:55
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

Voy a poner un ejemplo de lo que esta pasando. Imaginemos que mi servicio web en vez de ser una pagina a la cual se le accede a traves de una session CURL (en la cual se introduce la URL del servicio web, una serie de opciones y unos parametros). Bueno, pues k en vez de eso, es una funcion o proceso remoto con un nombre y unos atributos.

Entonces ese proceso hace una serie de gestiones con los atributos enviados por el cliente, como por ejemplo sacar informacion de una base de datos. Una vez que ya tiene la informacion tiene dos opciones:

-Mostrar esa informacion en el navegador a traves de un echo o un print, con lo cual el cliente ve la informacion

-Devolver al cliente la informacion a traves de return $respuesta;

Diferencias:

-En el primer caso el cliente ve la informacion

-En el segundo el cliente puede trabajar con la informacion y si quiere se la reenvia a un tercero o la almacena en algun sitio.

Yo lo que ando buscando es un metodo parecido al return de la funciones, pero para devolver informacion de una pagina a otra. Quizas con el mero hecho de hacer el "echo" el usuario ya tiene, de alguna forma que desconozco, la opcion de acceder a la informacion, pero no se como.

Sabriais alguno decirme como hacerlo

Muchas gracias y saludos
  #9 (permalink)  
Antiguo 22/04/2010, 10:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Servicio web REST

a ver, se supone que un servicio web no necesariamente debe entregarte la aplicación...

siempre debes solo enviar los datos al cliente, que en su navegador debería tener un programa, por decirlo así Javascript, que tu debes implementar que haga el reconocimiento de dichos datos y poder representarlo a la manera deseada... o bien, usar dicha API RESTful para solicitar los datos desde cualquier otro lenguaje y almacenarlo, tratarlo, etc...

ahora si entiendes la diferencia??

un WebService jamás es una aplicación... es solo un servicio de flujo de datos... simple!! ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 22/04/2010, 10:20
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

ok a ver si me entero, el servivio web envia los datos y que el cliente se las arregle no? pero eso implica que el servicio web tiene que saber quien es cliente y todo eso, con el fin de que le lleguen a el. Con un "echo" ya ocurre eso??

Yo entiendo perfectamente como funciona la comunicacion entre un cliente y un web service, no sabre explicarlo en un lenguaje tecnico pero se como va. El tema que quiero saber es cómo hace el servicio web para devolver la informacion, xk tiene que devolverla, el cliente pide informacion para que se la devuelva el web service. Entonces ¿Que metodo utilizan los web services para devolver esa informacion?

Muchas gracias y saludos a todos
  #11 (permalink)  
Antiguo 22/04/2010, 10:48
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Servicio web REST

Ya te lo han dicho anteriormente XML o JSON.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 22/04/2010, 10:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Servicio web REST

Es lo que te hemos dicho más arriba, usan XML o JSON, o de plano usan un método diferente como un string separado por comas (,) o algún otro carácter pero la idea es que traten de usar XML o JSON ya que es lo más común.
  #13 (permalink)  
Antiguo 22/04/2010, 13:34
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

perdonar pero es que me explique mal, cuando digo metodo me referia a funcion, es decir otra funcion que retorne datos y que no sea ni "print_r" o "echo".

No me estaba refiriendo al formato en el que viajan los datos.

Muchas gracias por vuestra paciencia, pero estoy viendo que mi lenguaje es cualquier cosa menos tecnico y me cuesta bastante hacerme entender
  #14 (permalink)  
Antiguo 22/04/2010, 13:54
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Servicio web REST

Bueno para parsear un xml puedes usar la librería SimpleXML o DOM, para parsear un JSON puedes usar la librería JSON. Para la parte de XML en este foro hay un aporte te recomiendo que mires la sección de aportes para que veas como lograr parsear un XML. JSON, no es complicado así que puedes ver el manual allí tienen ejemplos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 22/04/2010, 14:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Servicio web REST

Pues echo/print_r son para imprimir, de hecho si tu WebService esta en PHP me imagino al final usa echo $salida; para imprimir ya sea el XML/JSON. Otra opción es escribir el xml por ejemplo:
Código PHP:
Ver original
  1. <?php
  2. // procesos
  3. ?>
  4. <xml>
  5. <result><?php echo $var; ?></result>
  6. </xml>

Por ejemplo...
  #16 (permalink)  
Antiguo 22/04/2010, 14:39
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

Pero la parte de parsearlo la tengo clara. Lo que no se es como hacer para k el web service devuelva la informacion al usuario. Voy a poner algo de codigo a ver si asi consigo explicarme.

1-Codigo del cliente:

$ch = curl_init();

curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: '."JSON");

$respuesta = curl_exec($ch);
$respuesta=json_decode($respuesta);
print_r($respuesta);
//aqui deberia poder imprimir el array decodificado


2-Codigo del servicio web, que se ocupa de parsear la informacion que devolvera al cliente y devolversela:

$respuesta=array('Status'=>$errores,'Features'=>$d atos, 'Found'=>$num, 'Bounds'=>$posicion);
header('Content-type: application/json');
$respuesta=json_encode($respuesta);


-------------------------------------------hasta aqui todo claro, tengo la informacion parseada
ahora quiero devolversela al cliente que la solicito

echo $respuesta;

¿La pregunta es, conoceis una funcion que devuelva la informacion al usuario y que este pueda acceder por ejemplo al campo 'features'?, En los tutoriales que he mirado usan la funcion echo para devolver la informacion, pero yo mas bien creo que unicamente la imprimen, pero el usuario no puede acceder a ella para por ejemplo modificar a su gusto el campo 'features'

Saludos y muchas gracias nuevamente
  #17 (permalink)  
Antiguo 22/04/2010, 14:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Servicio web REST

Tu problema ya es en el cliente, no en el servidor y si ya tienes el array decodificado con json solamente es que lo modifiques o asignes a otra variable, pero en tu cliente:
Código PHP:
Ver original
  1. $ch = curl_init();
  2.  
  3. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  4. curl_setopt($ch, CURLOPT_URL, $url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  6. curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: '."JSON");
  7.  
  8. $respuesta = curl_exec($ch);
  9. $respuesta=json_decode($respuesta);
  10. $features = $respuesta['features'];
  11.  
  12. // haces algo con $features y luego lo imprimes.

Saludos.
  #18 (permalink)  
Antiguo 22/04/2010, 15:03
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

He probado lo que dices y nada, al hacer el curl_exec($ch) la informacion se enviar al servicio web correctamente, lo se porque si hago un echo en el servidor me muestra los datos correctamente tanto parseas como sin parsear.

Pero luego intento hacer lo mismo con la $respuesta y nada, esta en blanco, por eso pienso que la funcion echo no es la mas apropiado para devolver informacion al cliente, sino solo para visualizar la informacion en el navegador.

Conoceis otra funcion que devuelva los datos, antes una llamada de una sesion CURL??

Saludos
  #19 (permalink)  
Antiguo 22/04/2010, 15:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Servicio web REST

No entiendo realmente cual es tu duda, hablas de usuarios y luego cliente, si estas tratando en PHP, tu "cliente" es el script que hace la llamada al WebService en tu "servidor".

Ahora tu "servidor" debe de devolver la información a tu cliente, y la UNICA forma de hacerlo es usando echo/printf, ya que es la UNICA forma de escribir información en el stdout que es la salida que se envia en el cuerpo del request HTTP.

Ahora en tu "cliente" (lease el archivo que origino la consulta a tu WebService) lee esos datos que vienen en el cuerpo de tu request HTTP y los procesas, esto es lo que haces al devolver y procesar el resultado de curl_exec().

Si tienes dudas de como viene la estructura y la respuesta de tu servicio web (y a modo de Debug) puedes usar var_dump($respuesta) para ver la estructura.

var_dump es una función de PHP que te permite ver información de una variable, así como el tipo de dato y longitud, en base a esa respuesta puedes ya decidir como la vas a procesar en tu cliente (archivo que hizo el llamado a tu WebService) y entonces ver como decodificarlo y porcesarlo en tu archivo PHP.
  #20 (permalink)  
Antiguo 22/04/2010, 15:44
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Servicio web REST

Bueno pues muchisimas gracias por toda la informacion que me has ido dando, esta bien saber que las unicas formas de escribir informacion en el stdout son printf/echo. He visto que el problema esta en la decodificacion del objeto JSON, que por algun motivo me deja la variable en blanco. Pero eso lo ire investigando yo por mi cuenta para no daros mas la bara a vosotros

Una vez mas un millon de gracias por vuestro tiempo

Saludos

Etiquetas: servicio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:04.