Los webservices se están apoderando del mundo. Uno de los mótivos de la crecida de muchas redes sociales se debe a que cuentan con APIs que pueden ser utilizadas por terceros y que incrementan las funciones de páginas externas, amén de promocionar la suya propia. ¿Por qué no utilizar el mismo modelo en los sitios que desarrolles? En este artículo te vamos a mostrar como crear un webservice básico que proporcione una respuesta XML o JSON usando una pizca de PHP y MySQL. ¿Estás listo? Pues vamos a ello. Para este ejemplo cogeremos como ejemplo la base de datos de WordPress, un CMS que ya es utilizado por el 25% de los sitios web de todo Internet.
El PHP/MySQL
/* comprobamos que el usuario nos viene como un parametro */ if(isset($_GET['user']) && intval($_GET['user'])) { /* utilizar la variable que nos viene o establecerla nosotros */ $number_of_posts = isset($_GET['num']) ? intval($_GET['num']) : 10; //10 es por defecto $format = strtolower($_GET['format']) == 'json' ? 'json' : 'xml'; //xml es por defecto $user_id = intval($_GET['user']); /* conectamos a la bd */ $link = mysql_connect('localhost','usuario','password') or die('No se puede conectar a la BD'); mysql_select_db('nombrebd',$link) or die('No se puede seleccionar la BD'); /* sacamos los posts de bd */ $query = "SELECT post_title, guid FROM wp_posts WHERE post_author = $user_id AND post_status = 'publish' ORDER BY ID DESC LIMIT $number_of_posts"; $result = mysql_query($query,$link) or die('Query no funcional: '.$query); /* creamos el array con los datos */ $posts = array(); if(mysql_num_rows($result)) { while($post = mysql_fetch_assoc($result)) { $posts[] = array('post'=>$post); } } /* formateamos el resultado */ if($format == 'json') { header('Content-type: application/json'); echo json_encode(array('posts'=>$posts)); } else { header('Content-type: text/xml'); echo ''; foreach($posts as $index => $post) { if(is_array($post)) { foreach($post as $key => $value) { echo '<',$key,'>'; if(is_array($value)) { foreach($value as $tag => $val) { echo '<',$tag,'>',htmlentities($val),''; } } echo ''; } } } echo ''; } /* nos desconectamos de la bd */ @mysql_close($link); }
Considerando que un gran número de personas conectarán con tu webservice (con suerte), tendrás que hacer la validación adecuada antes de intentar conectar con la base de datos para, así, evitar ataques de inyección de código. Una vez que tengamos los resultados deseados de la base de datos, tendremos que recorrerlos mediante un buble para ir completando un array con nuestros datos. Array que más tarde formatearemos. Dependiendo del tipo de respuesta deseado, el resultado estará formateado, como ya has podido comprobar en el código, o bien en XML, o bien en JSON.
Tomaremos la siguiente url como ejemplo:
http://midominio.com/webservice.php?user=2&num=10
Ahora, echemos un vistazo a los posibles resultados de la url.
Resultado XML
<posts>
<post>
<post_title>Centrado vertical con CSS</post_title>
<guid>http://programacion.net/articulo/centrado_vertical_con_css_1172</guid>
</post>
<post>
<post_title>Centrado vertical con CSS</post_title>
<guid>http://programacion.net/articulo/centrado_vertical_con_css_1172</guid>
</post>
<post>
<post_title>Centrado vertical con CSS</post_title>
<guid>http://programacion.net/articulo/centrado_vertical_con_css_1172</guid>
</post>
</posts>
Ahora tomemos esta url como ejemplo:
http://midominio.com/webservice.php?user=2&num=10&format=json
Le hemos pasado como parámetro otro formato. El resultado sería...
Resultado JSON
{"posts":[{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}},{"post":{"post_title":"http://programacion.net/articulo/centrado_vertical_con_css_1172","guid":"http://programacion.net/articulo/centrado_vertical_con_css_1172"}}]}
La creación de un webservice básico es muy simple y anima a los usuarios a difundir la palabra acerca de tu sitio web o servicio. ¿Quieres más tráfico? ¿Quieres que tu página web no para crecer sin esfuerzo alguno? Hazme casi y crea un webservice.
Y este ha sido el artículo en el que trataba explicaros como crear un webservice básico usando PHP, MySQL, XML y JSON, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!