SlideShare a Scribd company logo
1 of 7
Download to read offline
Laboratorio DAR
Descripción general
En este laboratorio vamos a realizar una sencilla petición mediante estándares
web y vamos a representar los datos obtenidos en un página de manera limpia.
Iremos complicando y actualizando esta petición de datos para que cada vez se
acerque más a la manera actual de realizarse en la práctica. Es decir,
repasaremos cada una de las maneras de hacer peticiones AJAX desde la
antigüedad, hasta nuestros días.
Con más detalle, emplearemos, de manera escalonada, estas tecnologías de
comunicación entre clientes web y servidores:
el objeto XMLHttpRequest,
las funciones AJAX del archiconocido framework jQuery,
un plugin específico para jQuery creado por el mantenedor del servicio al
que nos vamos a conectar, y por último,
un componente web moderno (web component) desarrollado por un
tercero, que nos permitirá realizar peticiones parecidas, pero de manera
increiblemente elegante.
Laboratorio sobre chistes de Chuck Norris, una
API REST y el Desarrollo de Aplicaciones en Red
El actor y experto en artes marciales Carlos Ray Norris (mundialmente
conocido como Chuck Norris), ha servido desde hace mucho tiempo como
fuente de inspiración de cientos de chistes respecto a su fortaleza, coraje y
determinación (características idénticas a las de los alumnos del grado en
Ingeniería Informática en Unir). Tal es así, que incluso existe una base de datos
oficial (ICNDB) de estos chistes. Además, esta base de datos posee un API REST
muy fácil de usar.
A modo de anécdota, en esta entrevista, el propio Chuck Norris recita los
propios chistes efectuados, con cariño, a su costa.
Instalación del entorno de desarrollo
recomendado
Esta práctica se puede llevar a cabo de distintas formas. La Web es un entorno
de desarrollo abierto. Sin embargo, os recomiendo que hagáis uso de estos
estándares (internacionales y/o industriales) de facto, ya que son los más
usados y marcan las tendencias de programación más recientes.
El editor, Visual Studio Code, de Microsoft. Su instalación es muy sencilla
y es multiplataforma. Dentro de Visual Studio, recomiendo instalar las
extensiones HTML Snippets, HTML Bolierplate y Bootstrap4. Para ello
usa el sencillo y amigable gestor de extensiones de VS Code.
El gestor de paquetes, Bower, basado a su vez en NodeJS y NPM. Este
paso no es estrictamente necesario, ya que todas las librerías que
vamos a utilizar están disponibles mediante CDN. No obstante, quien
quiera ejercitarse con gestores de paquetes en desarrollo web de
vanguardia, puede instalar estas herramientas mediante Bower (y para
usar Bower, necesitará instalar NodeJS).
En caso de que querer usar Bower (insistimos: no es obligatorio en esta
práctica), comienza instalando NodeJS. Al hacerlo, instalará el gestor de
paquetes NPM y podremos invocarlo desde cualquier aplicación de línea de
comandos. Lo primero que haremos con NPM es instalar Bower, para lo cual
ejecutaremos el siguiente comando:
que por otro lado, viene bien documentado en su web. Una vez instalado (es
posible que sea necesario reabrir el intérprete de comandos, o ejecutar
refreshenv en el caso del cmd.com de Windows), ya podemos instalar
dependencias de nuestro proyecto.
Comienzo del ejercicio
Para empezar, como en todo proyecto Web moderno, vamos a crear una
carpeta de trabajo, por ejemplo ChistesChuck. A continuación, arrancamos el
Visual Studio Code y abrimos esa carpeta:
npm install -g bower1
Dentro de esa carpeta, crearemos un fichero HTML para comenzar:
chuck2005.html, donde empezaremos con la primera tarea.
Resolución del ejercicio a la manera de 2005
El objeto XMLHttpRequest nos permite hace peticiones AJAX de manera
bastante cómoda. Por ejemplo, supongamos que queremos recibir un chiste de
ICNDB, lo haríamos así:
En este ejemplo, se busca el texto de un único chiste, y al encontrarlo, se
sustituye el contenido de la primera etiqueta h1 de la página web donde se
ejecute este script.
Se pide: aplicar este script y sustituir el texto del chiste en el título central de
un elemento Jumbotron del framework Bootstrap. Evidentemente, al código
anterior le falta el andamiaje HTML.
Pista para simplificarse la vida: usad los plugins HTML5 snippets, HTML5
Boilerplate y Bootstrap de VS Code descritos anteriormente. Consultad la
documentación para ver cómo aprovechar todo su potencial (y creedme, son
muy ponentes y agilizan mucho el trabajo, por eso VS Code se ha convertido en
poco tiempo en el editor más usado para desarrollo Web).
Para usar el framework Bootstrap, instaladlo previamente con Bower o usad su
CDN oficial. En el caso de instalarlo en local, usad el comando:
y para usarlo, sólo tenéis que apuntar el tag de estilo a donde se encuentre el
CSS de Bootstrap, que normalmente será dentro de la carpeta
bower_components. ¿Para qué sirve la opción --save?
xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', 'http://api.icndb.com/jokes/random/', true);
xmlhttp.onreadystatechange = function(){
var textoChiste = JSON.parse(this.response).value.joke;
console.log('chiste recibido: ' + textoChiste);
var h1s = document.getElementsByTagName('h1');
h1s[0].innerHTML = textoChiste;
}
xmlhttp.send();
1
2
3
4
5
6
7
8
9
bower install bootstrap4 --save1
<link rel='stylesheet'
href='bower_components/path/al/css/de/bootstrap.css'>
1
Resolución del ejercicio en 2006
A principios de 2006 nació jQuery de la mano de John Resig. Todo empezó en
este sencillo e inocente post en su blog. Entre otras muchas cosas increíbles, el
framework jQuery incorpora una nueva instrucción $.ajax(…) muy útil.
Para hacer el ejercicio como en 2006, tenemos que enlazar con la biblioteca de
jQuery. Cread otro fichero, por ejemplo chuck2006.html. Nuevamente,
podemos usar su CDN o instalarla mediante Bower. Como en todas las librerías,
siempre vamos a tener distintas versiones. La mejor manera de dilucidar cuál
es la mejor en nuestro caso es buscando:
Yo sugiero instalar la versión jquery-dist:
En el caso de usar el CDN, sólo tenéis que incluir la URL que deseéis en el
atributo src del tag script.
Con el siguiente código Javascript, conseguimos un funcionamiento parecido al
ejercicio anterior:
Se pide: replicar el ejemplo anterior con jQuery. ¿Qué diferencias ves con
respecto al ejercicio anterior? ¿Cómo simplifica la vida jQuery? ¿Qué ocurre si
tenemos varios tags h1?
Resolución con plugin de jQuery (hasta ~2014)
jQuery no tardó en tener soporte para plugins (¡apenas unas semanas tras su
nacimiento!). Mucha gente empezó a elaborar estos mini-programas y entre
ellos, los propios gestores del ICNDB. Gracias a su plugin de jQuery, podemos
acceder a su API de manera todavía más elegante. En el enlace anterior tienes
acceso a un CDN listo para funcionar. Como anteriormente, sólo tenéis que
usarlo para poblar el atributo src de una etiqueta script.
bower search jquery --save1
bower install jquery-dist --save1
$.get("http://api.icndb.com/jokes/random", (response) => {
var textoChiste = response.value.joke;
$('h1').text(textoChiste);
})
1
2
3
4
Para extraer el texto de un norrischiste, simplemente tenéis que ejecutar:
Se pide que uséis el método $.icndb.getRandomJokes (atentos a la s del final)
para poblar los elementos de una lista ordenada (tag <ul></ul>). Ejemplo:
Se valorará muy positivamente el uso de una lista estilada con Bootstrap.
Responded también a la pregunta: cómo se escribían las funciones en las
versiones de ECMAScript previas a la versión 6? Pista aquí.
Resolución en 2014
A partir de finales de 2013 y predominantemente en 2014, contamos con el API
fetch, que permite hacer llamadas AJAX de manera muy limpia a a la jQuery. Se
pide repetir el ejercicio anterior con esta API. Podéis encontrar ejemplos y
descripción de esta función en la documentación de la fundación Mozilla.
Responde a esta pregunta: ¿Qué es el WHATWG? (organismo que, entre otras
cosas, ha definido la API del método fetch).
Se pide también, repetir el mismo ejercicio con node-fetch, y simplemente
imprimir por pantalla el texto de cada chiste.
Resolución del ejercicio con Web Components
(presente)
Y por fin llegamos a la forma de resolver este ejercicio de la manera más
elegante posible: con Web Components. Vamos a usar el componente descrito
aquí. Para instalarlo, se recomienda usar Bower:
$.icndb.getRandomJoke((response) => { var textoChiste =
response.joke; });
1
$.icndb.getRandomJokes({
number: 10,
success: (response) => {
response.forEach(element => { $("ul").append('<li>' + element.joke
+ '</li>'); });
}});
1
2
3
4
5
bower install chuck-norris-joke --save1
Aunque, como se indica en el enunciado, podemos usar un CDN. En este caso
no tenemos un CDN para este web component, pero podemos utilizar Github a
modo de tal, como explicamos más abajo.
Este módulo no se trata de un script de Javascript o un CSS (a la antigua
usanza), si no de un webcomponent moderno. Para usarlo, se necesita la nueva
directiva import definida en las últimas especificaciones del W3C. En caso de
haberlo instalado mediante Bower, escribiríamos esta línea en nuestra página:
Y en caso de usar Github como CDN, escribiríamos esta:
Ahora, si queremos un chiste de Chuck Norris, sólo tenemos que incluir este
tag en el fichero HTML:
Si hemos instalado el componente de manera local (con Bower, como se
recomienda) ya no podemos abrir la página directamente y ver los resultados:
ha de ser servida con un servidor web. Os recomiendo que uséis http-server,
basado en NodeJS y fácilmente instalable con NPM. Simplemente tenéis que
ejecutar el comando http-server en el directorio de trabajo y listo. Por cierto,
también es necesario, de momento, el uso de Chrome o Opera para ver el
resultado. Algunos navegadores todavía no soportan los web components, pero
es cuestión de (poco) tiempo.
Se pide: crear una página web con una tabla en la que cada fila sea un chiste de
Chuck Norris. La tabla ha de estar estilada con otro framework distinto a
Bootstrap, por ejemplo Skeleton. Instalad Skeleton con Bower:
o usad un CDN de Skeleton u otro framework CSS de vuestro gusto. El objetivo
es que os encontréis cómodos enlazando CSS en vuestros proyectos.
Aquí tenéis ejemplos de tablas con Skeleton.
<link rel="import" href="bower_components/chuck-norris-joke/chuck-
norris-joke.html">
1
<link rel="import"
href="https://raw.githubusercontent.com/erikringsmuth/chuck-norris-
joke/master/chuck-norris-joke.html">
1
<chuck-norris-joke></chuck-norris-joke>1
bower install skeleton-framework --save1
Resolución mediante promesas y Async/Await
Usad Promesas (que también encontrarás en la misma documentación de
Fetch) para tener en cuenta si la llamada AJAX funciona o no.
Entregable final
Para considerar el ejercicio entregado se pide un único PDF donde se narre la
resolución del ejercicio completo. Pueden incluirse capturas de pantalla de los
navegadores mostrando el resultado, pero el código ha de estar en texto.
Recomiendo el uso de Markdown, como yo he usado en este documento.

More Related Content

What's hot

Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaAgencia INNN
 
Introduccion a Nodejs
Introduccion a NodejsIntroduccion a Nodejs
Introduccion a NodejsJan Sanchez
 
Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jspdtbadboy0
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Iván López Martín
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)PiXeL16
 
Django: el framework web definitivo
Django: el framework web definitivoDjango: el framework web definitivo
Django: el framework web definitivoAnder Beaskoetxea
 
Convierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React NativeConvierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React NativeJoan Artés
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerIván López Martín
 
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2guest39ff1b
 
Open Source Modern Web Development
Open Source Modern Web DevelopmentOpen Source Modern Web Development
Open Source Modern Web DevelopmentJaime Irurzun
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosaFco Javier Núñez Berrocoso
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsFátima Casaú Pérez
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaipquaip
 

What's hot (18)

Introducción a Node.js
Introducción a Node.jsIntroducción a Node.js
Introducción a Node.js
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevilla
 
Introduccion a Nodejs
Introduccion a NodejsIntroduccion a Nodejs
Introduccion a Nodejs
 
Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jsp
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)
 
Django: el framework web definitivo
Django: el framework web definitivoDjango: el framework web definitivo
Django: el framework web definitivo
 
Convierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React NativeConvierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React Native
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
 
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Open Source Modern Web Development
Open Source Modern Web DevelopmentOpen Source Modern Web Development
Open Source Modern Web Development
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
 

Similar to Laboratorio sobre chistes de Chuck Norris, APIs REST y desarrollo web

Similar to Laboratorio sobre chistes de Chuck Norris, APIs REST y desarrollo web (20)

AJAX EN CURSO PHP
AJAX EN CURSO PHPAJAX EN CURSO PHP
AJAX EN CURSO PHP
 
TEMA Nº 3: ELEMENTOS DE JSP
TEMA Nº 3: ELEMENTOS DE JSPTEMA Nº 3: ELEMENTOS DE JSP
TEMA Nº 3: ELEMENTOS DE JSP
 
spring-boot-es
spring-boot-esspring-boot-es
spring-boot-es
 
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxEvolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
 
Ajax
AjaxAjax
Ajax
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
 
Ajax
AjaxAjax
Ajax
 
mootools y sexyimages
mootools y sexyimagesmootools y sexyimages
mootools y sexyimages
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
 
Primeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier AznarPrimeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier Aznar
 
Http al descubierto
Http al descubiertoHttp al descubierto
Http al descubierto
 
Http al descubierto
Http al descubiertoHttp al descubierto
Http al descubierto
 
Manual de jquery
Manual de jqueryManual de jquery
Manual de jquery
 
Jquery
JqueryJquery
Jquery
 
manual de jquery
manual de jquerymanual de jquery
manual de jquery
 
Como usar ajax con jquery
Como usar ajax con jqueryComo usar ajax con jquery
Como usar ajax con jquery
 
Manual Basico de jQuery
Manual Basico de jQueryManual Basico de jQuery
Manual Basico de jQuery
 
WordPress y JavaScript
WordPress y JavaScriptWordPress y JavaScript
WordPress y JavaScript
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 

Recently uploaded

UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesElianaCceresTorrico
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMONICADELROCIOMUNZON1
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Dr. Edwin Hernandez
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralsantirangelcor
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesgovovo2388
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAJOSLUISCALLATAENRIQU
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesMIGUELANGEL2658
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfs7yl3dr4g0n01
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDEdith Puclla
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 

Recently uploaded (20)

UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptx
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integral
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitales
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias locales
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 

Laboratorio sobre chistes de Chuck Norris, APIs REST y desarrollo web

  • 1. Laboratorio DAR Descripción general En este laboratorio vamos a realizar una sencilla petición mediante estándares web y vamos a representar los datos obtenidos en un página de manera limpia. Iremos complicando y actualizando esta petición de datos para que cada vez se acerque más a la manera actual de realizarse en la práctica. Es decir, repasaremos cada una de las maneras de hacer peticiones AJAX desde la antigüedad, hasta nuestros días. Con más detalle, emplearemos, de manera escalonada, estas tecnologías de comunicación entre clientes web y servidores: el objeto XMLHttpRequest, las funciones AJAX del archiconocido framework jQuery, un plugin específico para jQuery creado por el mantenedor del servicio al que nos vamos a conectar, y por último, un componente web moderno (web component) desarrollado por un tercero, que nos permitirá realizar peticiones parecidas, pero de manera increiblemente elegante. Laboratorio sobre chistes de Chuck Norris, una API REST y el Desarrollo de Aplicaciones en Red El actor y experto en artes marciales Carlos Ray Norris (mundialmente conocido como Chuck Norris), ha servido desde hace mucho tiempo como fuente de inspiración de cientos de chistes respecto a su fortaleza, coraje y determinación (características idénticas a las de los alumnos del grado en Ingeniería Informática en Unir). Tal es así, que incluso existe una base de datos oficial (ICNDB) de estos chistes. Además, esta base de datos posee un API REST muy fácil de usar.
  • 2. A modo de anécdota, en esta entrevista, el propio Chuck Norris recita los propios chistes efectuados, con cariño, a su costa. Instalación del entorno de desarrollo recomendado Esta práctica se puede llevar a cabo de distintas formas. La Web es un entorno de desarrollo abierto. Sin embargo, os recomiendo que hagáis uso de estos estándares (internacionales y/o industriales) de facto, ya que son los más usados y marcan las tendencias de programación más recientes. El editor, Visual Studio Code, de Microsoft. Su instalación es muy sencilla y es multiplataforma. Dentro de Visual Studio, recomiendo instalar las extensiones HTML Snippets, HTML Bolierplate y Bootstrap4. Para ello usa el sencillo y amigable gestor de extensiones de VS Code. El gestor de paquetes, Bower, basado a su vez en NodeJS y NPM. Este paso no es estrictamente necesario, ya que todas las librerías que vamos a utilizar están disponibles mediante CDN. No obstante, quien quiera ejercitarse con gestores de paquetes en desarrollo web de vanguardia, puede instalar estas herramientas mediante Bower (y para usar Bower, necesitará instalar NodeJS). En caso de que querer usar Bower (insistimos: no es obligatorio en esta práctica), comienza instalando NodeJS. Al hacerlo, instalará el gestor de paquetes NPM y podremos invocarlo desde cualquier aplicación de línea de comandos. Lo primero que haremos con NPM es instalar Bower, para lo cual ejecutaremos el siguiente comando: que por otro lado, viene bien documentado en su web. Una vez instalado (es posible que sea necesario reabrir el intérprete de comandos, o ejecutar refreshenv en el caso del cmd.com de Windows), ya podemos instalar dependencias de nuestro proyecto. Comienzo del ejercicio Para empezar, como en todo proyecto Web moderno, vamos a crear una carpeta de trabajo, por ejemplo ChistesChuck. A continuación, arrancamos el Visual Studio Code y abrimos esa carpeta: npm install -g bower1
  • 3. Dentro de esa carpeta, crearemos un fichero HTML para comenzar: chuck2005.html, donde empezaremos con la primera tarea. Resolución del ejercicio a la manera de 2005 El objeto XMLHttpRequest nos permite hace peticiones AJAX de manera bastante cómoda. Por ejemplo, supongamos que queremos recibir un chiste de ICNDB, lo haríamos así: En este ejemplo, se busca el texto de un único chiste, y al encontrarlo, se sustituye el contenido de la primera etiqueta h1 de la página web donde se ejecute este script. Se pide: aplicar este script y sustituir el texto del chiste en el título central de un elemento Jumbotron del framework Bootstrap. Evidentemente, al código anterior le falta el andamiaje HTML. Pista para simplificarse la vida: usad los plugins HTML5 snippets, HTML5 Boilerplate y Bootstrap de VS Code descritos anteriormente. Consultad la documentación para ver cómo aprovechar todo su potencial (y creedme, son muy ponentes y agilizan mucho el trabajo, por eso VS Code se ha convertido en poco tiempo en el editor más usado para desarrollo Web). Para usar el framework Bootstrap, instaladlo previamente con Bower o usad su CDN oficial. En el caso de instalarlo en local, usad el comando: y para usarlo, sólo tenéis que apuntar el tag de estilo a donde se encuentre el CSS de Bootstrap, que normalmente será dentro de la carpeta bower_components. ¿Para qué sirve la opción --save? xmlhttp = new XMLHttpRequest(); xmlhttp.open('GET', 'http://api.icndb.com/jokes/random/', true); xmlhttp.onreadystatechange = function(){ var textoChiste = JSON.parse(this.response).value.joke; console.log('chiste recibido: ' + textoChiste); var h1s = document.getElementsByTagName('h1'); h1s[0].innerHTML = textoChiste; } xmlhttp.send(); 1 2 3 4 5 6 7 8 9 bower install bootstrap4 --save1 <link rel='stylesheet' href='bower_components/path/al/css/de/bootstrap.css'> 1
  • 4. Resolución del ejercicio en 2006 A principios de 2006 nació jQuery de la mano de John Resig. Todo empezó en este sencillo e inocente post en su blog. Entre otras muchas cosas increíbles, el framework jQuery incorpora una nueva instrucción $.ajax(…) muy útil. Para hacer el ejercicio como en 2006, tenemos que enlazar con la biblioteca de jQuery. Cread otro fichero, por ejemplo chuck2006.html. Nuevamente, podemos usar su CDN o instalarla mediante Bower. Como en todas las librerías, siempre vamos a tener distintas versiones. La mejor manera de dilucidar cuál es la mejor en nuestro caso es buscando: Yo sugiero instalar la versión jquery-dist: En el caso de usar el CDN, sólo tenéis que incluir la URL que deseéis en el atributo src del tag script. Con el siguiente código Javascript, conseguimos un funcionamiento parecido al ejercicio anterior: Se pide: replicar el ejemplo anterior con jQuery. ¿Qué diferencias ves con respecto al ejercicio anterior? ¿Cómo simplifica la vida jQuery? ¿Qué ocurre si tenemos varios tags h1? Resolución con plugin de jQuery (hasta ~2014) jQuery no tardó en tener soporte para plugins (¡apenas unas semanas tras su nacimiento!). Mucha gente empezó a elaborar estos mini-programas y entre ellos, los propios gestores del ICNDB. Gracias a su plugin de jQuery, podemos acceder a su API de manera todavía más elegante. En el enlace anterior tienes acceso a un CDN listo para funcionar. Como anteriormente, sólo tenéis que usarlo para poblar el atributo src de una etiqueta script. bower search jquery --save1 bower install jquery-dist --save1 $.get("http://api.icndb.com/jokes/random", (response) => { var textoChiste = response.value.joke; $('h1').text(textoChiste); }) 1 2 3 4
  • 5. Para extraer el texto de un norrischiste, simplemente tenéis que ejecutar: Se pide que uséis el método $.icndb.getRandomJokes (atentos a la s del final) para poblar los elementos de una lista ordenada (tag <ul></ul>). Ejemplo: Se valorará muy positivamente el uso de una lista estilada con Bootstrap. Responded también a la pregunta: cómo se escribían las funciones en las versiones de ECMAScript previas a la versión 6? Pista aquí. Resolución en 2014 A partir de finales de 2013 y predominantemente en 2014, contamos con el API fetch, que permite hacer llamadas AJAX de manera muy limpia a a la jQuery. Se pide repetir el ejercicio anterior con esta API. Podéis encontrar ejemplos y descripción de esta función en la documentación de la fundación Mozilla. Responde a esta pregunta: ¿Qué es el WHATWG? (organismo que, entre otras cosas, ha definido la API del método fetch). Se pide también, repetir el mismo ejercicio con node-fetch, y simplemente imprimir por pantalla el texto de cada chiste. Resolución del ejercicio con Web Components (presente) Y por fin llegamos a la forma de resolver este ejercicio de la manera más elegante posible: con Web Components. Vamos a usar el componente descrito aquí. Para instalarlo, se recomienda usar Bower: $.icndb.getRandomJoke((response) => { var textoChiste = response.joke; }); 1 $.icndb.getRandomJokes({ number: 10, success: (response) => { response.forEach(element => { $("ul").append('<li>' + element.joke + '</li>'); }); }}); 1 2 3 4 5 bower install chuck-norris-joke --save1
  • 6. Aunque, como se indica en el enunciado, podemos usar un CDN. En este caso no tenemos un CDN para este web component, pero podemos utilizar Github a modo de tal, como explicamos más abajo. Este módulo no se trata de un script de Javascript o un CSS (a la antigua usanza), si no de un webcomponent moderno. Para usarlo, se necesita la nueva directiva import definida en las últimas especificaciones del W3C. En caso de haberlo instalado mediante Bower, escribiríamos esta línea en nuestra página: Y en caso de usar Github como CDN, escribiríamos esta: Ahora, si queremos un chiste de Chuck Norris, sólo tenemos que incluir este tag en el fichero HTML: Si hemos instalado el componente de manera local (con Bower, como se recomienda) ya no podemos abrir la página directamente y ver los resultados: ha de ser servida con un servidor web. Os recomiendo que uséis http-server, basado en NodeJS y fácilmente instalable con NPM. Simplemente tenéis que ejecutar el comando http-server en el directorio de trabajo y listo. Por cierto, también es necesario, de momento, el uso de Chrome o Opera para ver el resultado. Algunos navegadores todavía no soportan los web components, pero es cuestión de (poco) tiempo. Se pide: crear una página web con una tabla en la que cada fila sea un chiste de Chuck Norris. La tabla ha de estar estilada con otro framework distinto a Bootstrap, por ejemplo Skeleton. Instalad Skeleton con Bower: o usad un CDN de Skeleton u otro framework CSS de vuestro gusto. El objetivo es que os encontréis cómodos enlazando CSS en vuestros proyectos. Aquí tenéis ejemplos de tablas con Skeleton. <link rel="import" href="bower_components/chuck-norris-joke/chuck- norris-joke.html"> 1 <link rel="import" href="https://raw.githubusercontent.com/erikringsmuth/chuck-norris- joke/master/chuck-norris-joke.html"> 1 <chuck-norris-joke></chuck-norris-joke>1 bower install skeleton-framework --save1
  • 7. Resolución mediante promesas y Async/Await Usad Promesas (que también encontrarás en la misma documentación de Fetch) para tener en cuenta si la llamada AJAX funciona o no. Entregable final Para considerar el ejercicio entregado se pide un único PDF donde se narre la resolución del ejercicio completo. Pueden incluirse capturas de pantalla de los navegadores mostrando el resultado, pero el código ha de estar en texto. Recomiendo el uso de Markdown, como yo he usado en este documento.