Comunidad de diseño web y desarrollo en internet

Cómo usar el explorador de servicios de AMFPHP

Hace tiempo no trabajaba con AMFPHP por esa razón tuve que comenzar con todos los tutoriales de instalación y puesta en marcha, con la sorpresa de que muchas cosas de la instalación han cambiado, la versión que estoy instalando del paquete AMFPHP es la 1.2.5.
Antes de comenzar voy a suponer que por lo menos tienes nociones de AMFPHP, PHP, Flash Remoting, y MySQL, si no es así, estos tutoriales te serán muy útiles:

En el Tutorial de instalación de Flash Remoting y AMFPHP(1) dicen que hay una estructura de carpetas definidas, mencionan además que solo hay una que nos sirve que es flashservices, sin embargo la estructura de las mismas en la versión 1.2.5 es la siguiente:

Lista nueva de Folder en AMFPHP

Esta no fue mi única sorpresa, me encontré con varias.
Otro de los cambios que noté es que no hay necesidad de hacer el archivo gateway.php pues este ya está listo para ser utilizado y de una manera bastante óptima, o por lo menos eso dicen los autores del proyecto.

La otra gran sorpresa y el motivo de este tutorial es una herramienta que me parece ahorra un millón de horas de programación y depuración, esta es el browser o explorador de servicios que además de ayudar a ver el comportamiento de estos, también ayuda a programarlos.

Pero, ¿Cómo funciona esta herramienta milagrosa?

Fácil, vamos a esta dirección que es donde se encuentra el browser: "http://localhost/amfphp/browser/" (sin comillas) si el AMFPHP esta instalado de manera local; si por el contrario lo tienes instalado en un host en internet entonces escribes: "http://tuhost/amfphp/browser/" en la barra de direcciones de tu explorador y vamos a ver una página como esta:

Nuevo Browser AMFPHP

Como podrán ver dice que no hay ningún servicio, por eso vamos a programar uno para ver como funciona el explorador.

En tu editor de Php (yo utilizó el Dreamweaver) escribe en un documento nuevo:

<?php
class operaciones{
    function operaciones(){
    }
    function suma($var1,$var2){
        $resultado=$var1+$var2;
        return $resultado;
    }
}
?>

y se guarda con el nombre de "operaciones.php" en la carpeta "services",ojo esto es importante.

Ahora vamos a recargar el browser y ver que aparece.

Nuevo Servicio

Vemos como el servicio que acabamos de crear aparece, pero las personas que ya tienen pericia en AMFPHP dirán: ¿dónde está la "method table"?, así no va a funcionar, y, efectivamente, no funciona:

Error Method Table

Para solucionar este inconverniente de una manera muy facil se ha creado la herramienta "mt". Esta se encuentra como un vínculo al lado del nombre del servicio que habiamos creado:

Enlace MT

Se da clic y la method table se genera de manera automática, ahorrandonos mucho tiempo.

Method Table generada

En la method table que se acaba de generar hay varias cosas interesantes que vamos a analizar y otras que debemos cambiar.
En primer lugar nos damos cuenta que el código de la method table quedó listo para cortar y pegar con los mismos argumentos que nosotros pusimos en nuestra función.
Segundo, hay un link que dice "Save to operaciones.methodTable.php" en este archivo("operaciones.methodTable.php") se guardará la method table y la forma de utilizarlo es poner en el constructor de la clase la siguiente línea de código:

include("operaciones.methodTable.php");

Osea que nuestro código quedaría:

<?php
class operaciones{
    function operaciones(){
        include("operaciones.methodTable.php");
    }
    function suma($var1,$var2){
        $resultado=$var1+$var2;
        return $resultado;
    }
}
?>

Nuevamente para los que ya conocen AMFPHP dirán: "pero esa función quedo: "access" = "private" (ver la antepenultima línea de la imagen anterior) y no podremos acceder al servicio desde flash"; pues los autores del browser también pensaron en eso y para poder identificar que funciones son privadas o remotas solo debemos agregar un comentario antes de la función de la siguiente forma:

<?php
class operaciones{
    function operaciones(){
        include("operaciones.methodTable.php");
    }
    /*Funcion para sumar 2 cifras
    * @access remote
    */
    function suma($var1,$var2){
        $resultado=$var1+$var2;
        return $resultado;
    }
}
?>

Vamos a generar la method table nuevamente y vamos a ver que pasa

Method Table OK

Podemos ver que cambia el acceso a remoto y que además agregó el comentario de la función.
Ahora que quedó bien pues probemos como funciona el browser.

Browser Services OK

Escribimos los argumentos y luego damos clic en el botón Submit Query, el resultado es este:

Resultado del servicio

Si tienes varias funciones en una misma clase el Explorador de Servicios (browser) te mostrará esto (obviamente debes actualizar la method table):

Multiples servicios

Ahora quiero mostrar la parte que nos ayuda a depurar, esto es muy útil, sobre todo cuando trabajamos con bases de datos MySQL.
A mi me pasó que intente ver cual era el error sin saber que era lo que fallaba: si el código de flash o el código del Php y no lo supe si no hasta después de miles de compilaciones del flash. Para comenzar con esta parte voy a hacer una base de datos sencilla, de una sola tabla.

Cédula
nombre
teléfono
email

Ahora vamos a PHP y creamos las funciones para insertar y para ver los usuarios en la base de datos pero antes de mostrar el código expliquémoslo un poco: hago tres funciones, dos remotas y una privada, recordemos que remota quiere decir que se puede acceder desde flash y privada sólo desde la misma clase.
La función Crear_usuario es para añadir un usuario a la base de datos y la función Mostrar_usuario es para ver todos los usuarios que hay en la base de datos. La función query es para conectarse y mandar órdenes a la base de datos. Aquí hay 2 líneas claves

NetDebug::trace($sql);
NetDebug::trace(mysql_error());

Estas me sirven para poder controlar las variables que se programen por medio del "trace headers"
El código quedaría así:

<?php
class Ventas
{
    function Ventas()
    {
        include("Ventas.methodTable.php");
    }
    /*
    *@access remote
    */
    function Crear_usuario($cedula,$nombre,$telefono,$email){
        $sql="INSERT INTO usuarios(cedula,nombre,telefono,email) VALUES('$nombre','$color_camiseta','$color_pantaloneta','$color_medias')";
        return $this->query($sql);
    }
    /*
    *@access remote
    */
    function Mostrar_usuario(){
        $sql="SELECT cedula,nombre,telefono,email FROM usuario ORDER BY cedula ASC";
        return $this->query($sql);
    }
    /*
    *@acces private
    */
    function query ($sql){
        $conexion= mysql_connect("localhost","root","") or die("no se puede conectar porque ".mysql_error());
        mysql_select_db(ventas);
        $result= mysql_query($sql,$conexion);
        mysql_close($conexion);
        NetDebug::trace($sql);
        NetDebug::trace(mysql_error());
        return $result;
    }
}
?>

Esto es lo que pasa cuando ejecutamos la función Mostrar_usuarios

Resultados al conectarnos

Ahora vamos a ver que hay en los "trace headers"

Trace Headers

Para ver la verdadera utilidad hagamos un error en el código de la función Mostrar_usuarios y luego ejecutémoslo

Error MySql

El primer indicio de error es que nos devolvió "false", ahora revisemos los "trace headers"

Error Trace Headers

¿Notas cual es el error?; exacto, la tabla no se llama "usuario" sino "usuarios"

Estoy seguro que notaron una opción al lado del "mt" (¿recuerdan nuestra tercera imagen?) que dice "code", esta de manera similar produce una clase para llamar desde flash a los servicios pero, sinceramente, creo que es mucho más fácil y óptimo utilizar la clase que nos enseña nuestro amigo Maikel en el tutorial Manejar AMFPHP fácil con una clase en Actionscript.

Espero que esta info te sirva para aumentar la velocidad en el desarrollo de tus aplicaciones con Flash y AMFPHP usando el explorador de servicios.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Descargar Archivo

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate