Los servicios web son una herramienta fantástica para los desarrolladores de páginas web. Tenemos a nuestra disposición una ingente cantidad de información incorporada a nuestras páginas actualizada y en tiempo real.
2. ¿Qué es un servicio web?
Es un servidor web que ofrece información cuyo destino no es una persona con
un navegador si no otra aplicación que “revenderá” dicha información al usuario
final.
Las páginas de un servicio web pueden coexistir con la páginas web normales
accedidas por personas. El protocolo es también HTTP y el servidor web es el
mismo. Solo cambia el formato de las páginas. Las páginas de un servicio web
NO utilizan HTML sino XML o SOAP.
Las páginas de un servicio web son más simples ya que la aplicación cliente solo
toma lo que necesita. No tiene sentido insertar publicidad o imágenes.
3. Ejemplo: Agencia Virtual de Viajes
USUARIO FINAL
AGENCIA DE VIAJES
VIRTUAL
IBERIA
LUFTHANSA
AIR FRANCE
4. LENGUAJES UTILIZADOS
Todos están basados en XML
Métodos
GET
POST
Petición
SOAP (Es más antiguo, rígido y complejo) Simple Object Access Protocol
REST o RESTful (Es más moderno, flexible y simple) Representational State Transfer
Respuesta
SOAP
XML – Extensible Markup Language
JSON - JavaScript Object Notation
10. Ejercicio: Google Finance
Servicio Web
https://www.google.com/finance
Cotización de un valor en tiempo real
API
http://finance.google.com/finance/info?client=ig&q=BME%3AREP
Respuesta JSON (Es necesario retirar algunos caracteres)
Objetivo del ejercicio
Test del API con la aplicación SoapUI
Creación de un fichero PHP que visualice los datos más importante
11. Implementación
de un Servicio Web
// create SQL based on HTTP method
switch ($method) {
case 'GET':
$sql = "select * from `$table`".($key?" WHERE id=$key":''); break;
case 'PUT':
$sql = "update `$table` set $set where id=$key"; break;
case 'POST':
$sql = "insert into `$table` set $set"; break;
case 'DELETE':
$sql = "delete `$table` where id=$key"; break;
}
// excecute SQL statement
$result = mysqli_query($link,$sql);
// die if SQL statement failed
if (!$result) {
http_response_code(404);
die(mysqli_error());
}
// excecute SQL statement
$result = mysqli_query($link,$sql);
// die if SQL statement failed
if (!$result) {
http_response_code(404);
die(mysqli_error());
}
// print results, insert id or affected row count
if ($method == 'GET') {
if (!$key) echo '[';
for ($i=0;$i<mysqli_num_rows($result);$i++) {
echo ($i>0?',':'').json_encode(mysqli_fetch_object($result));
}
if (!$key) echo ']';
} elseif ($method == 'POST') {
echo mysqli_insert_id($link);
} else {
echo mysqli_affected_rows($link);
}
// close mysql connection
mysqli_close($link);
<?php
// get the HTTP method, path and body of the request
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
$input = json_decode(file_get_contents('php://input'),true);
// connect to the mysql database
$link = mysqli_connect('localhost', 'user', 'pass', 'dbname');
mysqli_set_charset($link,'utf8');
// retrieve the table and key from the path
$table = preg_replace('/[^a-z0-9_]+/i','',array_shift($request));
$key = array_shift($request)+0;
// escape the columns and values from the input object
$columns = preg_replace('/[^a-z0-9_]+/i','',array_keys($input));
$values = array_map(function ($value) use ($link) {
if ($value===null) return null;
return mysqli_real_escape_string($link,(string)$value);
},array_values($input));
// build the SET part of the SQL command
$set = '';
for ($i=0;$i<count($columns);$i++) {
$set.=($i>0?',':'').'`'.$columns[$i].'`=';
$set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
}
12. Ejercicio: Diseño de un servicio Web
Cliente
Aplicación SoapUI
Servicio Web
Aplicación listar empleados de la tabla Scott
Parámetros de entrada
Petición GET
Código empleado o nombre de empleado
Tipo de respuesta JSON o XML (parámetro mode)
13. Caminos para el desarrollo
Desarrollo descendente (Top-Down) o Primero el contrato:
Se parte del archivo WSDL (contrato), que define el funcionamiento del servicio web
(interfaz), sin entrar en detalles de implementación. Por esto, se denomina desarrollo con
el contrato (archivo WSDL) por delante.
Los programadores, tanto del servicio como de los consumidores del mismo, pueden
desarrollar en paralelo, asumiendo un comportamiento definido.
Desarrollo ascendente (Bottom-Up) o Primero el código:
Se parte de la implementación de las funcionalidades que el servicio exportará, para
llegar en último término al archivo WSDL (contrato).
Los programadores de los consumidores del servicio deben esperar a que éste esté
completamente codificado y se haya generado el WSDL, para poder empezar a producir
invocaciones a sus métodos.
14. Ejercicio: OpenWeatherMap
Servicio Web
http://www.OpenWeatherMap.org
Tiempo actual de un lugar
API
http://api.openweathermap.org/data/2.5/weather?q=Madrid&appid=5d3a300c7371f098
f448b4980871a592
Respuesta JSON
Objetivo del ejercicio
Test del API con la aplicación SoapUI
Creación de un fichero PHP que visualice los datos más importante
15. Ejercicio: INE
Servicio Web
http://www.ine.es/dyngs/DataLab/manual.html?cid=45
Información del Instituto Nacional de Estadística
API
http://servicios.ine.es/wstempus/js/ES/DATOS_SERIE/{input}[?parámetros]
Respuesta JSON
Objetivo del ejercicio
Test del API con la aplicación SoapUI
Visualizar el número de ocupados (EPA87) y el número de parados (EPA86) del año 2016
16. WSDL
Utilizado en los servicios SOAP
Lenguaje basado en XML para describir servicios web
Especifica la localización del servicio y las funcionalidades (métodos) que exporta.
Ejemplo:
http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?
wsdl
17. WSLD – Elementos principales
Sección Uso
<types> Contenedor de definiciones de tipos de datos usados
por los mensajes de solicitud y de respuesta del
servicio web
<message> Mensajes enviados a y recibidos por el servicio web
Definición tipada de los datos que se transmiten
<portType> Lista de funciones que el servicio web exporta
Conjunto de operaciones soportadas por uno o más
puntos de término
<binding> Protocolo y especificación de formato de datos de un
tipo de puerto particular
<service> Servicio(s) expuesto(s)
20. Ejercicio: Catastro Español (SOAP)
Servicio Web
http://www.catastro.meh.es/ayuda/lang/castellano/servicios_web.htm
Información catastral de España
API
http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?wsdl
SOAP
Objetivo del ejercicio
Test del API con la aplicación SoapUI
Probar las distintas opciones de petición de información
Crear un fichero PHP que realice una petición, introduzca la respuesta en un objeto XML
y realice un “var_dump” en pantalla de dicha variable
21. Ejercicio: Catastro Español (REST)
Servicio Web
http://www.catastro.meh.es/ayuda/lang/castellano/servicios_web.htm
Información catastral de España
API
http://ovc.catastro.meh.es/ovcservweb/ovcswlocalizacionrc/ovccallejero.asmx/ConsultaVi
a?Provincia=MADRID&Municipio=MADRID&TipoVia=CL&NombreVia=padre claret
Content-Type: text/xml
Respuesta XML
Objetivo del ejercicio
Test del API con la aplicación SoapUI
Creación de un fichero PHP que visualice los datos más importante
22. Resultado de los ejercicios
Ejercicio Google Finance
https://drive.google.com/open?id=0B4GlgKGAv8zJeDR0ZTNaZzA1RGs
Ejercicio OpenWeatherMap
https://drive.google.com/open?id=0B4GlgKGAv8zJWDR2TEhHLVYzOGM
Ejercicio Catastro Provincias
https://drive.google.com/open?id=0B4GlgKGAv8zJS1Y2TWliNVFIcUE
Ejercicio Catastro Municipios
https://drive.google.com/open?id=0B4GlgKGAv8zJQjIxNmFBb3pnTGc