Herramientas de usuario

Herramientas del sitio


clase:daw:daw:1eval:tema04

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:daw:daw:1eval:tema04 [2020/09/10 20:31]
admin [REST]
clase:daw:daw:1eval:tema04 [2021/10/14 21:30] (actual)
admin [Ejercicios]
Línea 70: Línea 70:
   * ''Accept-Language'': El idioma en el que queremos que nos retorne los datos.. Luego el servidor los retornará en el idioma que quiera/pueda.   * ''Accept-Language'': El idioma en el que queremos que nos retorne los datos.. Luego el servidor los retornará en el idioma que quiera/pueda.
   * ''Host'': El dominio al que se está enviando la petición. Esta cabecera el muy útil ya que permite en un mismo servidor tener alojados varios dominios.   * ''Host'': El dominio al que se está enviando la petición. Esta cabecera el muy útil ya que permite en un mismo servidor tener alojados varios dominios.
 +  * ''Content-Type'': El formato de los datos que envian al servidor. Ej: En ''text/html'', en ''text/xml'', ''application/json'' , ''application/pdf'', etc. Y como están codificado. Normalmente los formatos son ''utf-8'' o ''ISO-8859-1''
  
  
Línea 83: Línea 84:
  
 <note> <note>
-La cabecera ''Content-Type'' es imporante para el programador ya que el servidor puede no saber exactamente el formato de los datos y es necesario que lo indiquemos nosotros.  +  * La cabecera ''Content-Type'' es imporante para el programador ya que el servidor puede no saber exactamente el formato de los datos y es necesario que lo indiquemos nosotros.Muchas veces hay ademas problemas con la codificación si es ''utf-8'' o ''ISO-8859-1'' por lo que también se debe indicar. 
-Muchas veces hay ademas problemas con la codificación si es ''utf-8'' o ''ISO-8859-1'' por lo que también se debe indicar.+  * Por otro lado notar que ''Content-Type'' se puede usar tanto en la petición como en la respuesta. Se usa en la petición si se envían datos en la petición
 </note> </note>
  
Línea 108: Línea 109:
  
   * ''GET'': Queremos obtener los datos   * ''GET'': Queremos obtener los datos
-  * ''POST'': Queremos actualziar los datos. +  * ''POST'': Queremos añadir los datos. 
-  * ''PUT'': Queremos añadir nuevos datos.+  * ''PUT'': Queremos actualizar nuevos datos.
   * ''DELETE'': Queremos borrar los datos.   * ''DELETE'': Queremos borrar los datos.
  
Línea 128: Línea 129:
      
 ===== REST ===== ===== REST =====
-Podríamos decir que REST es usar toda la potencia de HTTP en nuestras propias aplicaciones. Suele usar Por forma general el formato usado en los datos es [[https://es.wikipedia.org/wiki/JSON|JSON]] , es muy sencilla y utiliza todas las características que puede de de HTTP en vez de reinventarse lo que ya tiene HTTP.  +Podríamos decir que REST es usar toda la potencia de HTTP en nuestras propias aplicaciones. Suele usar Por forma general el formato usado en los datos es [[https://es.wikipedia.org/wiki/JSON|JSON]] , es muy sencilla y utiliza todas las características que puede de de HTTP en vez de reinventarse lo que ya tiene HTTP. Esta última característica yo creo que es la que mejor explica que es REST: Si algo ya existe en HTTP y REST siempre funciona bajo HTTP, ¿porque no usar entonces todo lo que ofrece HTTP?. Por lo tanto cuando necesitemos algo en nuestra aplicación siempre debemos preguntarnos , ¿como resuelve este problema ya el protocolo HTTP? Y usarlo en vez de crear nuestra solución.
- +
- +
- +
- +
-Esta última característica yo creo que es la que mejor explica que es REST: Si algo ya existe en HTTP y REST siempre funciona bajo HTTP, ¿porque no usar entonces todo lo que ofrece HTTP?. Por lo tanto cuando necesitemos algo en nuestra aplicación siempre debemos preguntarnos , ¿como resuelve este problema ya el protocolo HTTP? Y usarlo en vez de crear nuestra solución+
- +
-Hablando de una forma sencillo lo que nos dice es como debemos comunicarnos desde la página web ((o desde una aplicación movil ,desde una aplicación de escritorio, desde otro servidor, etc.)) con el servidor  especificando cosas como: +
-  * Las operaciones a realizar +
-  * La Estructura de la URI +
-  * Tratamiendo de errores +
-  * El formato de los datos +
-  * El estado de la aplicación +
-  * Cache +
-  * Etc.+
  
  
Línea 156: Línea 143:
  
  
-==== La Estructura de la URI ==== +==== La Estructura de la URL ==== 
-Ya tenemos las operaciones, ahora pasemos al formato de la URI. La URI es como la URL pero le hemos quitado la parte inicial de la URL ya que la parte inicial depende de donde instalemos la aplicación. +Veamos la estructura de la URL de las peticiones en un supuesto ejemplo de una base de datos de usuarios.
- +
- +
- +
- +
-Con todas estas reglas vamos a ver las URI que se suelen usar en una aplicación. Vamos a usar como ejemplo la entidad "Usuario", es decir la URI que usaríamos para hacer un CRUD de la Tabla o Entidad "Usuario".+
  
 ^ Descripción ^ URL ^ Método HTTP ^ JSON Enviado ^ JSON Retornado ^ ^ Descripción ^ URL ^ Método HTTP ^ JSON Enviado ^ JSON Retornado ^
 | Obtener un libro | ''/libro/{idLibro}'' | GET | Ninguno | Libro leido | | Obtener un libro | ''/libro/{idLibro}'' | GET | Ninguno | Libro leido |
-| Listado de libros | ''/libro'' | GET | Ninguno | Array de libros |+| Listado de libros | ''/libro'' | GET | Ninguno | Array de Libros |
 | Añadir un libro | ''/libro'' | POST | Libro a insertar | Libro insertado | | Añadir un libro | ''/libro'' | POST | Libro a insertar | Libro insertado |
 | Actualizar un libro | ''/libro/{idLibro}'' | PUT | Libro a actualizar | Libro actualizado | | Actualizar un libro | ''/libro/{idLibro}'' | PUT | Libro a actualizar | Libro actualizado |
-| Borrar un usuario | ''/libro/{idLibro}'' | DELETE | Ninguno | Ninguno |+| Borrar un libro | ''/libro/{idLibro}'' | DELETE | Ninguno | Ninguno |
  
 Donde pone ''{idLibro}'' se subtituiría por el id del libro. Donde pone ''{idLibro}'' se subtituiría por el id del libro.
Línea 184: Línea 166:
  
 ===== Servidor REST en NodeJS ===== ===== Servidor REST en NodeJS =====
 +Ahora vamos a ver como modificar nuestro servidor en NodeJS para poder leer y modificar cosas relacionadas con HTTP.
  
- +El ejemplo contiene: 
- +  * Leer cabeceras 
-  * Ejemplo con: +  * Aceptar varios métodos 
-    * Leer cabeceras +  * Retornar varios códigos de estado 
-    * Aceptar varios métodos +  * Devolver cabeceras
-    * Retornar varios códigos de estado +
-    * Devolver cabeceras.+
  
 <sxh javascript> <sxh javascript>
Línea 220: Línea 201:
   response.send('Hello from delete!');   response.send('Hello from delete!');
 }); });
-app.delete('/parada/38', (request, response) => {+app.delete('/libro/38', (request, response) => {
   response.status(200);   response.status(200);
-  response.send('Borrada parada 38');+  response.send('Borrado libro 38');
 }); });
-app.delete('/parada/39', (request, response) => {+app.delete('/libro/39', (request, response) => {
   response.status(404);   response.status(404);
-  response.send('La parada 39 no existe');+  response.send('El libro 39 no existe');
 }); });
    
Línea 235: Línea 216:
 ===== Ejercicios ===== ===== Ejercicios =====
  
 +==== Ejercicio 1 ====
 +Usando el programa [[https://www.putty.org/|putty]], puedes conectarte en con el tipo de conexión "raw" al puerto 80 de cualquier máquina y enviar texto al cualquier servidor.
  
-    * [[https://github.com/typicode/json-server|JSON Server: Get a full fake REST API with zero coding in less than 30 seconds]] +Debes conectarte al servidor "www.fpmislata.com" al puerto 80 y enviar el texto de una petición HTTP. Es decir escribir tal cual se envía una petición HTTP. 
-      {{biblioteca-original.json.zip|}+ 
-    [[https://addons.mozilla.org/es/firefox/addon/restclient/|REST Client. Plugin Firefox]]+  * Envía la petición HTTP sin cabeceras. ¿Porque ha fallado? 
 +  * Añade ahora la cabecera ''Host'' y vuelve a enviar la petición. ¿Porque ahora funciona?. Indica las cabeceras que ha retornado y los datos. 
 +  * Haz una nueva petición a la URL "/wordpress/secretaria/novedades-secretaria/". Comprueba que todo funciona. 
 + 
 + 
 + 
 +==== Ejercicio 2 ==== 
 +En tu máquina debes instalar lo siguiente: 
 +  * Descargar el fichero {{biblioteca-original.json.zip|}} y descomprimelo. Mira el contenido del fichero ''biblioteca-original.json''
 +  Instala el servidor [[https://github.com/typicode/json-server|JSON Server]] 
 + 
 +  npm install -g json-server 
 +   
 + 
 +  Ves al directorio donde está el fichero ''biblioteca-original.json'' y ejecuta: 
 + 
 +  json-server --watch biblioteca-original.json 
 + 
 +  * Navega a [[http://localhost:3000/libro/1]] y debes ver lo siguiente: 
 + 
 +<sxh json> 
 +
 +  "id": 1, 
 +  "title": "El señor de los anillos", 
 +  "autor": 1, 
 +  "genero":
 +
 +</sxh> 
 + 
 +Indica las siguientes  y datos: 
 + 
 +^  Descripción  ^  URL  ^  Datos enviados al Servidor  ^  Datos leidos del servidor  ^  
 +| Obtener el libro de "La fundación"   |    |    | 
 +| Borrar el libro de "Yo Robot" |      |    | 
 +| Obtener todos los libros |    |    |    | 
 +| Añadir un nuevo  género llamado "Histórico" |    |    |    | 
 + 
 + 
 +==== Ejercicio 3 ==== 
 +Desde Firefox instala el plugin de [[https://addons.mozilla.org/es/firefox/addon/restclient/|RESTClient]] o desde Chrome el plugin [[https://chrome.google.com/webstore/detail/yet-another-rest-client/ehafadccdcdedbhcbddihehiodgcddpl|Yet Another REST Client]] 
 + 
 +Lanza las URL del ejercicio anterior. Si hay datos de entrada los deberás enviar en el campo de "Body"  y añadir las cabeceras adecuadas 
 + 
 +==== Ejercicio 4 ==== 
 +Modifica el servidor hecho en NodeJS de forma que: 
 +  * En la URL ''/libro/3'' con un ''GET'' retorne los datos de un libro (Te tienes que inventar los datos). Deberá permitir que sean en JSON o XML dependiendo de la cabecera "Accept" y también habrá que tener en cuenta la cabecera ''Accept-Language'' , permitiendo la respuesta en castellano o inglés. 
 +  * En la URL ''/libro/4'' con un ''GET'' indique que no existe ese usuario 
 + 
 +<note tip> 
 +Este ejercicio **no** tiene nada que ver con el ejercicio del JSON Server, se hace todo sobre el código de NodeJS de express. 
 +</note>
  
clase/daw/daw/1eval/tema04.1599762707.txt.gz · Última modificación: 2020/09/10 20:31 por admin