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 23:46]
admin [REST]
clase:daw:daw:1eval:tema04 [2024/11/22 18:35] (actual)
admin [4. El protocolo HTTP]
Línea 2: Línea 2:
 El protocolo HTTP se usa para enviar y recibir datos en la Web. El protocolo HTTP se usa para enviar y recibir datos en la Web.
  
-En los siguientes enlaces se hace una explicación de HTTP:+Mas información: 
 +  * [[https://datatracker.ietf.org/doc/html/rfc2616|RFC 2616 -- Hypertext Transfer Protocol -- HTTP/1.1]]
   * [[https://developer.mozilla.org/es/docs/Web/HTTP/Overview|Generalidades del protocolo HTTP]]: Explicación del HTTP   * [[https://developer.mozilla.org/es/docs/Web/HTTP/Overview|Generalidades del protocolo HTTP]]: Explicación del HTTP
   * [[https://blog.makeitreal.camp/el-protocolo-http/|El protocolo HTTP]]: Otra explicación del HTTP   * [[https://blog.makeitreal.camp/el-protocolo-http/|El protocolo HTTP]]: Otra explicación del HTTP
Línea 70: Línea 71:
   * ''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''.  
 +  * ''Content-Language'': El idioma de los datos que se envían. 
 +  * ''Content-Length'': Tamaño en bytes de los datos que se envían
  
  
Línea 83: Línea 86:
  
 <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'', ''Content-Language'' y ''Content-Length'' 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 98: Línea 101:
  
 De entre todos los código están algunos que solemos ver a menudo: De entre todos los código están algunos que solemos ver a menudo:
-  * 204: La petición no retorna datos. +  * 200: Todo ha ido bien 
-  * 403: Prohibido el acceso al documento+  * 201: Se ha creado el recurso (Suele ser en un INSERT) 
 +  * 204: La petición no retorna datos. (Suele ser en un DELETE) 
 +  * 400: Los datos que ha enviado el cliente no son correctos 
 +  * 401: Hay que estar logueado 
 +  * 403: El usuario está logueado pero tiene Prohibido el acceso al documento
   * 404: No encuentra el documento   * 404: No encuentra el documento
   * 500: Error del servidor   * 500: Error del servidor
  
 +{{:clase:daw:daw:1eval:yahoo_http_error_codes.png|}}
 ===== Métodos ===== ===== Métodos =====
 Los métodos ( o verbos) HTTP indican que acción queremos hacer con los datos. Al navegar normalmente se usa siempre el ''GET''. Los métodos ( o verbos) HTTP indican que acción queremos hacer con los datos. Al navegar normalmente se usa siempre el ''GET''.
  
   * ''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 124: Línea 131:
   Accept-Language: fr   Accept-Language: fr
  
-El servidor **borrará** el fichero ''index.html'', por lo que con ''POST'' podríamos añadir una nueva página y con ''PUT'' borrar una página.+El servidor **borrará** el fichero ''index.html'', por lo que con ''POST'' podríamos añadir una nueva página y con ''DELETE'' borrar una página.
  
      
Línea 136: Línea 143:
 ^ Método HTTP ^ Descripción ^ Metodo CRUD ^ Metodo SQL ^ ^ Método HTTP ^ Descripción ^ Metodo CRUD ^ Metodo SQL ^
 | GET | Este método HTTP lo usaremos para cuando queremos leer datos del servidor | Read | SELECT | | GET | Este método HTTP lo usaremos para cuando queremos leer datos del servidor | Read | SELECT |
-| POST | Este método HTTP lo usaremos para añadir datos al servidor | Crear | INSERT |+| POST | Este método HTTP lo usaremos para añadir datos al servidor | Create | INSERT |
 | PUT | Este método HTTP lo usaremos para actualizar ((realmente es actualizar o insertar pero en este curso por simplificar, el POST solo actualizará)) datos del servidor | Update | UPDATE | | PUT | Este método HTTP lo usaremos para actualizar ((realmente es actualizar o insertar pero en este curso por simplificar, el POST solo actualizará)) datos del servidor | Update | UPDATE |
 | DELETE | Este método HTTP lo usaremos para borrar datos del servidor | Delete | DELETE | | DELETE | Este método HTTP lo usaremos para borrar datos del servidor | Delete | DELETE |
Línea 146: Línea 153:
  
 ^ Descripción ^ URL ^ Método HTTP ^ JSON Enviado ^ JSON Retornado ^ ^ Descripción ^ URL ^ Método HTTP ^ JSON Enviado ^ JSON Retornado ^
-| Obtener un usuario | ''/libro/{idUsuario}'' | GET | Ninguno | Usuario leido | +| Obtener un libro | ''/libro/{idLibro}'' | GET | Ninguno | Libro leido | 
-| Listado de usuarios | ''/libro'' | GET | Ninguno | Array de Usuarios +| Listado de libros | ''/libro'' | GET | Ninguno | Array de Libros 
-| Añadir un usuario | ''/libro'' | POST | Libro a insertar | Usuario insertado | +| Añadir un libro | ''/libro'' | POST | Libro a insertar | Libro insertado | 
-| Actualizar un usuario | ''/libro/{idUsuario}'' | PUT | Usuario a actualizar | Usuario actualizado | +| Actualizar un libro | ''/libro/{idLibro}'' | PUT | Libro a actualizar | Libro actualizado | 
-| Borrar un usuario | ''/libro/{idUsuario}'' | DELETE | Ninguno | Ninguno |+| Borrar un libro | ''/libro/{idLibro}'' | DELETE | Ninguno | Ninguno |
  
-Donde pone ''{idUsuario}'' se subtituiría por el id del Usuario.+Donde pone ''{idLibro}'' se subtituiría por el id del libro.
  
 El "JSON Enviado" es el JSON que se debe enviar con los datos al hacer esa petición. Como podemos ver solo se envía al insertar o al actualizar. Es decir es el JSON del usuario a insertar o el JSON con los nuevo datos del  usuario a modificar. El "JSON Enviado" es el JSON que se debe enviar con los datos al hacer esa petición. Como podemos ver solo se envía al insertar o al actualizar. Es decir es el JSON del usuario a insertar o el JSON con los nuevo datos del  usuario a modificar.
Línea 200: Línea 207:
   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 216: Línea 223:
  
 ==== Ejercicio 1 ==== ==== 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.
 +
 +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.
 +
 +  * 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: En tu máquina debes instalar lo siguiente:
-  * Descargar el fichero {{biblioteca-original.json.zip|}} y descomprimelo. +  * Descargar el fichero {{biblioteca-original.json.zip|}} y descomprimelo. Mira el contenido del fichero ''biblioteca-original.json''.
-  * Instala el siguiente plugin de Firefox: [[https://addons.mozilla.org/es/firefox/addon/restclient/|REST Client. Plugin Firefox]]+
   * Instala el servidor [[https://github.com/typicode/json-server|JSON Server]]   * Instala el servidor [[https://github.com/typicode/json-server|JSON Server]]
  
Línea 239: Línea 256:
 </sxh> </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.1599774388.txt.gz · Última modificación: 2020/09/10 23:46 por admin