Diferencia entre revisiones de «Usuario:ManuelRomero/PHP/servicioWeb/Rest/Practica»

De WikiEducator
Saltar a: navegación, buscar
 
Línea 1: Línea 1:
{{:Usuario:ManuelRomero/PHP/servicioWeb/Rest/nav}}
+
__TOC__
 
;Vamos a crear un RestFull en php usando Curl en el cliente para consumirlo.
 
;Vamos a crear un RestFull en php usando Curl en el cliente para consumirlo.
 
===El servidor===
 
===El servidor===

Última revisión de 11:39 17 abr 2017

Vamos a crear un RestFull en php usando Curl en el cliente para consumirlo.

El servidor

  • En el servidor debemos crear un servicio que responda a las siguientes solicitudes (GET, POST, PUT, DELETE)
Icon present.gif
Tip: En los ejemplos de las url, deberás cambiar manuel.infenlaces.com/dwes por tu url


Get productos

http://manuel.infenlaces.com/dwes/RestFull_Server/productos
Nos devolverá un listado con el nombre corto de todos los productos

Get un producto

http://manuel.infenlaces.com/dwes/RestFull_Server/productos/3DSNG
Nos devolverá todos los datos del producto cuyo código especificamos, en este caso 3DSNG o el mensaje no existe ese producto

Insert un producto (PUT)

http://manuel.infenlaces.com/dwes/RestFull_Server/productos/insert

  • Insertaremos los productos que le pasaremos por un formulario retornando la información
El producto (nombre_corto) se ha insertado correctamente
El producto (nombre_corto) no se ha podido insertar
Icon present.gif
Tip: Recuerda que esta solicitud ha de ser un PUT no un GET. Si picamos en la url, nos saldrán datos porque el servidor lo interpretará como un GET y esto es listar todos los productos


DEL un producto

http://manuel.infenlaces.com/dwes/RestFull_Server/productos/del/1111

  • Borrará el producto cuyo código sea 1111 si existe y nos informará:
El producto (nombre_corto) se ha insertado correctamente
El producto (nombre_corto) no se ha podido insertar
Icon present.gif
Tip: Igual que en el caso anteriro la solicitud al servidor ha de ser DEL y no GET


POST para actulizar un producto

http://manuel.infenlaces.com/dwes/RestFull_Server/productos/update/1111

  • Actualizará el producto cuyo código es 1111 con los datos que reciba del cliente y os informará de ello
El producto (nombre_corto) se ha actualizado correctamente
El producto (nombre_corto) no se ha podido actualizar
Icon present.gif
Tip: La solicitud ha de ser POST


.htaccess

Debemos de hacer las url amigables En realidad en el servidor siempre se deberá de ejecutuar el fichero index.php cuyo código se facilita a continuación:

Icon present.gif
Tip: Los métodos de la base de datos son los típicos, por lo que no debería de costar su implementación


El cliente

  • Ahora nos queda crear el cliente. Para ello podemos crear un formulario para poder pasar datos al cliente
  • La idea que os propongo es la siguiente:
  1. Cuando accedemos podremos ver un listado de todos los códigos de productos en un select para poder seleccionar uno de ellos.
  2. Tendremos un botón de tipo submit para cada una de las posibles acciones como podemos ver en la imagen
Practica rest.png

  1. Según apretemos las opcines podremos ver el resultado
http://manuel.infenlaces.com/dwes/RestFull_Client/index.php
  • Lógicamente las funciones especificadas realizan llamadas, usando curl, al servicio que antes hemos desarrollado
  • Vamos a ver por ejemplo como hacemos un update y un get de todos los productos
function obtener_productos() { 
    $ch = curl_init("http://manuel.infenlaces.com/dwes/RestFull_Server/productos");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $productos = curl_exec($ch);
    $productos = json_decode($productos);
    curl_close($ch);
    return $productos;
}
function actualizar_producto($codigo) {
    $ch = curl_init("http://localhost/dwes/RestFull_Server/update/$codigo");
//curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Especificamos una solicitud delete
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
    $producto = curl_exec($ch);
    $producto = json_decode($producto);
    curl_close($ch);
    return $producto;
}