Download servicios web PHP - Universidad Distrital

Document related concepts
no text concepts found
Transcript
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE
CALDAS
FACULTAD DE INGENIERIA
DOCTORADO EN INGENIERÍA
COMPETENCIAS EN CIENCIA DE LA
INFORMACIÓN Y EL CONOCIMIENTO
Carlos Enrique Montenegro Marín
Ingeniero de Sistemas de la Universidad Distrital
Magister en ciencias de la Información y las
comunicaciones de la Universidad Distrital
DEA en ingeniería de Software de la Pontifica
Universidad de Salamanca
PhD en Sistemas y Servicios informáticos para
internet de la Universidad de Oviedo
Correo Electronico:
[email protected]
[email protected]
Linkedin:
http://es.linkedin.com/pub/carlos-enriquemontenegro-marin/26/584/82a
Facebook:
http://www.facebook.com/ingcarlosmontenegro
Twitter
@ingcemm
Tutorial Servicios Web
Cómo crear servicios web PHP
Lo primero a l considerar es que debe tener instados los servicios de Apache, MySQL y
PHP, para ello puedo utilizar programas como XAMP.
Los formatos más utilizados para compartir información mediante estos servicios web
son XML (y otros derivados) y JSON. XML es un lenguaje de marcas muy similar al
HTML, se puede ver normalmente en las fuentes RSS utilizadas para difundir listas de
noticias. JSON es un formato ligero de intercambio de datos. Este último da mejores
resultados en cuanto a rapidez y procesamiento, como ya hemos visto servicios web con
XML ahora utilizaremos JSON.
Nuestro servicio va a devolvernos una lista de libros, para ellos primero crearemos una
base de datos. Abrimos phpMyAdmin para ello en un navegador
escribimos http://localhost/phpmyadmin. Vamos a "Base de datos" y creamos una
nueva base de datos, le llamaremos android, aparecerá en la lista de la parte izquierda.
Pinchamos sobre ella y creamos una nueva tabla llamada libros con 3 columnas:
id_libro, libro y isbn. Actualización: ponemos los nombres de las columnas en
minúscula para no tener problemas a la hora de leerlo con el script PHP.
Para cada uno de los campos indicar de que tipo es, id_libro es un INT además como va
a ser un identificador será PRIMARY y para que cada vez que insertemos un registro no
nos tengamos que preocupar de calcular este dato marcamos la casilla AUTO
INCREMENT.
Los campos libro y isbn son de tipo texto, tenemos VARCHAR el cual debemos indicar
la longitud máxima, en nuestro caso pondremos 1.000 y 50 respectivamente. Existe otro
tipo de dato para texto, TEXT, ideal cuando almacenamos grandes cantidades de texto,
como por ejemplo HTML.
Una vez creada la tabla la, seleccionarla e insertar 4 ó 5 registros para que luego al crear
el servicio podamos comprobar como funciona.
El siguiente paso es crear nuestro servicio para ello abrimos nuestro IDE BlueFish y
dentro de la ruta /Applications/XAMPP/htdocs creamos una carpeta android para
nuestro servicio. El servicio constará de varios archivos los cuales se irán detallando
que es lo que hace cada uno. Para crear cada uno de ellos haremos botón derecho del
ratón sobre nuestra carpeta android, seleccionamos archivo nuevo y le damos el nombre
correspondiente.
Empezamos con globals.php, el cual va a tener parámetros de configuración, en
principio para poder acceder a la base de datos. Como se puede ver he creado una
clase config y las propiedades son static, es decir, no necesito crear un objeto config
para poder acceder a estas. Como se ve PHP soporta programación orientada a objetos,
aunque si se quiere se puede utilizar programación estructurada.
<?php
class config{
public static function getBBDDServer() {
return 'localhost';
}
public static function getBBDDName(){
return 'android';
}
public static function getBBDDUser(){
return 'root';
}
public static function getBBDDPwd(){
return 'root';
}
}
?>
El siguiente archivo será dbmanager.php, este archivo nos ayudará a gestionar la base
de datos y las consultas que hagamos a ella. Lo voy a hacer lo más básico posible para
no complicar mucho el ejemplo. Vuelvo a crear una clase dbmanager con el
método executeQuery, al que le pasamos una consulta, esta se ejecuta y nos devuelve
el resultado.
Destacar la instrucción include_once para referenciar nuestro archivo de configuración.
Existe también la instrucción include, la diferencia entre ellas es que la primera solo
incluye una vez el mismo archivo, lo cual puede dar problemas si se incluye más de una
vez.
Para poder utilizar las propiedades de esta clase lo hacemos con el nombre de la clase
seguido de :: y el nombre de la propiedad o método.
<?php
include_once('globals.php');
class dbmanager{
public function executeQuery($sql){
$con = mysql_connect(config::getBBDDServer(), config::getBBDDUser(),
config::getBBDDPwd());
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db(config::getBBDDName(), $con);
$result = mysql_query($sql);
mysql_close($con);
return $result;
}
}
?>
El siguiente archivo es libros.php, otra vez hago los include de los archivos necesarios
y creo una clase libros con dos métodos. El primero de ellos getLibros, crea un objeto
dbmanager y ejecuta la consulta que hemos construido en el mismo método. Como se
ve es private por que lo vamos a utilizar únicamente dentro de la clase.
El segundo método getJSONLibros es publico y se encarga de obtener los datos con el
método anterior y almacenar el resultado en la variable $result, luego la recorre y
construye la estructura JSON con cada uno de sus items, y por ultimo devuelve la
variable $json.
Como se ve las variables en PHP se declaran con un $ siempre delante y para utilizar
métodos de un objeto que hemos instanciado sería clase->metodo. Si el método está en la
misma clase seria $this->metodo.
<?php
include_once('globals.php');
include_once('dbmanager.php');
class libros{
private function getLibros(){
$sql = "SELECT l.* ";
$sql .= " FROM libros AS l ";
$db = new dbmanager();
return $db->executeQuery($sql);
}
public function getJSONLibros(){
$json = "";
$i = 0;
$result = $this->getLibros();
$json .= " { \"libros\" : [ ";
while($row = mysql_fetch_array($result)){
if($i > 0)
$json .= ",";
$json .= " { \"id\" : ".$row['id_libro'].", \"libro\":
\"".$row['libro']."\", \"isbn\": \"".$row['isbn']."\" ";
$json .= "} ";
$i++;
}
$json .= " ] ";
$json .= " } ";
return $json;
}
}
El último archivo es al que llamaremos para obtener el resultado de nuestro servicio, lo
llamaremos service.libros.php. Este archivo es muy simple, únicamente se hace el
include necesario, instancia la clase libros e imprimimos el resultado del
método getJSONLibros.
<?php
include_once('libros.php');
$libros = new libros();
echo $libros->getJSONLibros();
?>
Por último probamos en el navegador
http://localhost/android/service.libros.php
Debería aparecer el JSON correspondiente.
este
servicio
con
la
url
Leyendo servicios web desde Java
Ahora en este el ejercicio lo que vamos a hacer es conectarnos a nuestro servidor y
leeremos el contenido JSON.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class JsonParsing { private static String getContenidoHTML() throws IOException { URL url = new URL("http://localhost/android/service.libros.php"); URLConnection uc = url.openConnection(); uc.connect(); //Creamos el objeto con el que vamos a leer BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); String inputLine; String contenido = ""; while ((inputLine = in.readLine()) != null) { contenido += inputLine + "\n"; } in.close(); return contenido; } public static void main(String[] args) throws Exception { String CadenaJson = getContenidoHTML().toString(); System.out.println(CadenaJson); } } Con esto lo único que faltaría es utilizar un parseador a objetos JSON.