Listado completo de tutoriales
ES6 - API fetch (consumir API públicas) |
Hay muchas empresas y organismos públicos que hacen públicos sus datos y permiten que otros sitios web y aplicaciones puedan consultar dicha información.
Con el API fetch podemos fácilmente acceder a las API que suministran otros sitios web.
Veamos con un ejemplo como consumimos del sitio jsonplaceholder.typicode.com/ datos ficticios sobre 10 usuarios.
Debemos conocer dos cosas para poder consumir los datos:
La URL que nos suministra el recurso, en nuestro caso es:
https://jsonplaceholder.typicode.com/users
La estructura del archivo JSON para conocer los nombres de propiedades que accederemos:
[ { "id": 1, "name": "Leanne Graham", "username": "Bret", "email": "Sincere@april.biz", "address": { "street": "Kulas Light", "suite": "Apt. 556", "city": "Gwenborough", "zipcode": "92998-3874", "geo": { "lat": "-37.3159", "lng": "81.1496" } }, "phone": "1-770-736-8031 x56442", "website": "hildegard.org", "company": { "name": "Romaguera-Crona", "catchPhrase": "Multi-layered client-server neural-net", "bs": "harness real-time e-markets" } }, etc.
Veamos lo sencillo que es recuperar los datos de la petición mediante la API fetch:
<!DOCTYPE html> <html> <head> <title>Ejemplo de JavaScript</title> <meta charset="UTF-8"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> </head> <body> <div class="container"> <div class="row"> <table class="table table-striped" id="tabla1"> </table> </div> </div> <script> fetch("https://jsonplaceholder.typicode.com/users") .then(response => response.json()) .then(datos => { let cad = '<tr><th>Nombre</th><th>Email</th><th>Télefono</th></tr>'; for (let usuario of datos) { cad += `<tr><td>${usuario.name}</td> <td>${usuario.email}</td> <td>${usuario.phone}</td></tr>`; } document.getElementById("tabla1").innerHTML = cad; }); </script> </body> </html>
Tenemos como resultado cuando pedimos la página al servidor web:
Solo a efectos que la tabla de datos se muestre con una mejor estética hemos importado de un CDN la librería CSS de Bootstrap:
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
Luego en el bloque de HTML hemos dispuesto una tabla HTML vacía, con la intención que en forma dinámica se carguen con los datos que recuperaremos mediante el API fetch:
<div class="container"> <div class="row"> <table class="table table-striped" id="tabla1"> </table> </div> </div>
Si se encuentra olvidado de la librería Bootstrap puede recordarlo con el curso de Bootstrap Ya.
Inmediatamente el DOM de la página se encuentra cargado por el navegador web procedemos a llamar a la función 'fetch' y le pasamos como parámetro la URL del recurso que sabemos que retorna los datos de 10 usuarios ficticios:
fetch("https://jsonplaceholder.typicode.com/users")
Enlazamos la promesa que devuelve la función 'fetch' con la función 'then', donde procedemos pedir que se conviertan los datos recuperados a formato JSON:
.then(response => response.json())
Finalmente llamamos al método 'then' de la segunda promesa donde disponemos la función donde concatenamos todos los datos que almacena el array almacenado en el parámetro 'datos':
.then(datos => { let cad = '<tr><th>Nombre</th><th>Email</th><th>Télefono</th></tr>'; for (let usuario of datos) { cad += `<tr><td>${usuario.name}</td> <td>${usuario.email}</td> <td>${usuario.phone}</td></tr>`; } document.getElementById("tabla1").innerHTML = cad; });
Actualizamos el contenido de la 'tabla1' luego de generar el string respectivo.