• Publicidad

Cliente JSON para consumir servicio REST en PHP

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Re: Cliente JSON para consumir servicio REST en PHP

Notapor scout » 2011-07-03 16:02 @709

Desde el lado del servidor la función es muy simple...
La función de llamada la adjunto debajo de la sayHello para confirmar el codificado...

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. function sayHello($yourname)
  2. {
  3.          return "Hello ".$yourname."!";
  4. }
Coloreado en 0.024 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1.  
  2.    private function call($name, $args) {
  3.         if ($this->methods[$name] == true) {
  4.             $result = call_user_func_array($name, $args);
  5.             return json_encode($result);
  6.         }
  7.     }
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4

Utilizando el código propuesto la respuesta fue la siguiente

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Script Output :
Executing file : C:\clientesimpledeserviciophp.pl

Raw content: '"Hello pedro!"}'
Didn't get a JSON object back at C:/perl/site/lib/JSON/RPC/Simple/Client.pm line 83.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Publicidad

Re: Cliente JSON para consumir servicio REST en PHP

Notapor explorer » 2011-07-03 16:53 @745

Nada que hacer... las líneas 75 a 85 del módulo JSON::RPC::Simple::Client requieren, de todas maneras, que el resultado sea siempre una referencia a un hash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. die "Didn't get a JSON object back" unless ref $result eq "HASH";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


La solución sería que el servidor respondiera siempre con una estructura JSON, y no con valores directos.

Habría otra posibilidad... pero habría que dar una voltereta...

Tendríamos que crear un paquete JSON propio, con nuestras propias funciones encode() y decode(), para que J::R::S:C lo aceptara, y así podríamos poner un if(), para que, en caso de que el servidor nos devuelva un valor de forma directa, convertirlo a un hash.

Es lo malo de los módulos Simple... que a veces son demasiado simples...

Otra cosa que puedes hacer... Editas el fichero C:/perl/site/lib/JSON/RPC/Simple/Client.pm y comentas (ocultas) la línea 83 :lol:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cliente JSON para consumir servicio REST en PHP

Notapor scout » 2011-07-03 17:08 @755

No pasa nada, todo bien, explorer. Gracias por darle vueltas. La idea de todas las pruebas que voy haciendo es para avanzar en conocimientos y comparar soluciones, sobre todo comparar...

Respecto a los servicios web seguiré probando alternativas para o hacia Perl o probando otros módulos de Perl. Lo bueno es que ya pasé por SOAP, WSDL y REST y me sirvió mucho para aprender... Si encuentro en un futuro la solución lo postearé y si alguien va por este camino al menos le ayudará en sus pruebas...

Nuevamente muchas gracias.
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Anterior

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados