Fetch API
Why use Fetch?
- Generally used with external API's
- Easily get data from local or remote sources.
- It is a replacement for XMLHttpRequest.
- It is a web API that can be used to create requests.
- It is asynchronous and uses Promises.
- Fetch can be used to GET, POST, PUT, or DELETE data
- Error handling is simple
- Fetch Syntax:
fetch(url, { options });
Reading data from local text file
//example.txt fileYou'll be successful. Keep working!
fetch('example.txt').then(response => response.text()).then(text => console.log(text));
Reading data from a local JSON File
//people.json[{"name": "John","age": 20},{"name": "Mary","age": 24},{"name": "Bob","age": 32}]
fetch('people.json').then( response => response.json()).then( json => {json.forEach( person => {console.log(person.name);})})
Reading data from an API using Promises
Get Request:
- To handle promises returned by fetch(), we chain .then() methods
- The .json() method converts a returned promise to a JSON object.
- Format
fetch('https://api-url-goes-here.com/endpoint').then(response => {if (response.ok) {return response.json();}throw new Error('Request failed!');},networkError => {console.log(networkError.message);}).then(jsonResponse => {return jsonResponse;});
- Example
fetch("https://jsonplaceholder.typicode.com/photos/10").then(res => res.json()).then(json => {console.log(json)const div = document.createElement('div');const img = document.createElement('img');div.innerHTML = json.title;img.src = json.url;document.body.appendChild(div);document.body.appendChild(img);}).catch(err => console.error(err));
Post Request: Fetch POST call takes two arguments
- An endpoint of the API
- An object that contains information needed for the POST request
fetch('https://api-url-goes-here.com/endpoint', {method: 'POST',body: JSON.stringify({ id: '200' }),}).then(response => {if (response.ok) {return response.json();}throw new Error('Request failed!');},networkError => {console.log(networkError.message);}).then(jsonResponse => {return jsonResponse;});
Reading data from an API using async await format
async/await Get Request:
- Format
const getData = async () => {try {const response = await fetch('https://api-url-goes-here.com/endpoint');if (response.ok) {const jsonResponse = await response.json();return jsonResponse;}throw new Error('Request failed!');} catch (error) {console.log(error);}};
- Example
async function getPosts() {const response = await fetch('https://jsonplaceholder.typicode.com/posts');const posts = await response.json();let html = "";posts.slice(0,5).forEach( post => { //to get first 5 postsconst title = post.title;const body = post.body;html += `<div class='post'><h3>${title}</h3><p>${body}</p></div>`;});document.body.innerHTML = html;}getPosts();
async/await Post Request:
- Example:
const getData = async () => {try {const response = await fetch('https://api-url-goes-here.com/endpoint', {method: 'POST',body: JSON.stringify({ id: 200 }),});if (response.ok) {const jsonResponse = await response.json();return jsonResponse;}throw new Error('Request failed!');} catch (error) {console.log(error);}};
- Example:
async function submitPost() {let title = "Sample Title";let body = "Sample Body";const options = {method: "POST",body: JSON.stringify({ title: title, body: body }),headers: new Headers({"Content-Type": "application/json"})};const postPromise = await fetch("https://jsonplaceholder.typicode.com/posts",options);if(postPromise.ok) {const post = await postPromise.json();console.log('post', post);} else {console.log('error');}}submitPost();