Servicios web

Qué es un servicio web

Un servicio web es un programa disponible en Internet y que mediante HTTP puede recibir peticiones y entregar información.

Podemos entender un servicio web como una biblioteca de funciones remota. De la misma manera que un programa que quiere realizar una tarea hace uso de una función de una biblioteca, un programa puede recurrir a un servicio web que le proporciona el resultado de una tarea.

Las ventajas de ofrecer un servicio web son muchas: puede ser universal (si se permite el acceso abierto, cualquiera puede aprovecharlo o nosotros aprovechar servicios ya existentes), su actualización es automática (los clientes acceden siempre a la única versión disponible), es más escalable (una aplicación compleja se puede descomponer en muchos servicios web coordinados y dedicar a cada uno la infraestructura que necesite), etc.

Los servicios web también ofrecen desventajas: el retraso debido a la comunicación entre el programa y el servicio, la centralización (si el servicio es inaccesible, el programa no podría funcionar correctamente), etc.

De un programa monolítico a un servicio web

Los siguientes ejemplos muestran la evolución desde una aplicación monolítica hasta una aplicación distribuida (con un servicio web) pasando por el uso de funciones o bibliotecas. El ejemplo es trivial y no justificaría el uso de servicios web, pero sirve como ejemplo.

Argumentos y valores devueltos

En el ejemplo de servicio web anterior, la llamada al servicio no incluye parámetros y la respuesta es un simple dato, que no necesita ninguna estructura, pero es posible tanto enviar parámetros al servicio web como recibir datos compuestos.

Usando un servicio web para recuperar una imagen de una base de datos.

En esta pagina le indicamos la imagen que queremos recuperar

 <?php
 //Ver.php
    $cumple = false;
    if(isset($_POST['add']))
    {
        $numero=$_POST['numero'];
        
   }

echo"<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<titleRecuperar una imagen de una base de datos</title>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'>
<style type='text/css'>
*{ font-family:Segoe, 'Segoe UI', 'DejaVu Sans', 'Trebuchet MS', Verdana, sans-serif}
.main{ margin:auto; border:1px solid #7C7A7A; width:60%; text-align:left; padding:30px; background:#85c587}
input[type=submit]{ background:#6ca16e; width:100%;
    padding:5px 15px; 
    background:#ccc; 
    cursor:pointer;
	font-size:16px;
   
}
input[type=text]{  width:40%;
    padding:5px 15px; height:25px;
	font-size:16px;
   
}
.form-control {
	padding: 0px 0px;
}
</style>
</head>
<body bgcolor='#bed7c0'><br>
<div class='main'>
<h1>Mostrando imagen almacenada en MySQL</h1>
    
   <form action='' method='post'>
     <table width='330' height='135' border='0' class='text'>
         <tr>
             <td><label>Codigo Imagen</label></td>
             <td><input type='text' name='numero' id='numero'></td> 
         </tr>

         <tr>
             <td align='center'>
                <button type='submit' id='boton' name='add' >Cargar Imagen</button>
             </td>
         </tr>
     </table>
  </form>
    
  <div class='panel panel-primary'>
    <div class='panel-body'>'
        
<img src='vista.php?id=".$numero."'alt='Img blob desde MySQL' width='600' >      
 	  </div> 
    </div>
 </div>
</body>
</html>
"
  ?>   
    

Usando un servicio web para recuperar una imagen de una base de datos.

En esta pagina recuperamos la imagen

<?php
//vista.php
if(!empty($_GET['id'])){
    //Credenciales de conexion
    $Host ="localhost";
 $dbName = "BaseDatos";
 $tbl_name = "imagenes_tabla";
 $Username= "usuario";
   $Password  = "contraseña";
    
    //Crear conexion mysql
    $db = new mysqli($Host, $Username, $Password, $dbName);
    
    //revisar conexion
    if($db->connect_error){
       die("Connection failed: " . $db->connect_error);
    }
    
    //Extraer imagen de la BD mediante GET
    $result = $db->query("SELECT imagenes FROM imagenes_tabla WHERE id = {$_GET['id']}");
    
    if($result->num_rows > 0){
        $imgDatos = $result->fetch_assoc();
        
        //Mostrar Imagen
        header("Content-type: image/jpg"); 
        echo $imgDatos['imagenes'];
        
    }else{
        echo 'Imagen no existe...';
    }
}
?>