Making HTTP requests is a fundamental part of web development. Whether you're fetching data, submitting a form, updating content, or deleting a resource — the Fetch API makes it clean and modern.
In this blog, we'll walk through how to use the Fetch API to make GET, POST, PUT, PATCH, and DELETE requests — with real-world examples.
🔍 What is the Fetch API?
The Fetch API provides a simple and native way to make HTTP requests in the browser. It returns Promises and works with async/await.
✅ It’s built into all modern browsers — no need for extra libraries like Axios.
📦 Basic Syntax
fetch(url, options)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));Or using async/await:
const response = await fetch(url, options);
const data = await response.json();✅ 1. GET Request (Fetch Data)
fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error fetching data:', error));✅ With async/await
const fetchPosts = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Error:', error);
}
};
fetchPosts();📝 2. POST Request (Create Data)
const createPost = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'New Post',
body: 'This is the body of the new post.',
userId: 1
})
});
const data = await response.json();
console.log('Created Post:', data);
} catch (error) {
console.error('Error creating post:', error);
}
};
createPost();🔄 3. PUT Request (Update Entire Resource)
const updatePost = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
id: 1,
title: 'Updated Post',
body: 'This post has been updated.',
userId: 1,
}),
});
const data = await response.json();
console.log('Updated Post:', data);
} catch (error) {
console.error('Error updating post:', error);
}
};
updatePost();🩹 4. PATCH Request (Partial Update)
const patchPost = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: 'Partially Updated Title',
}),
});
const data = await response.json();
console.log('Partially Updated Post:', data);
} catch (error) {
console.error('Error patching post:', error);
}
};
patchPost();❌ 5. DELETE Request (Remove Data)
const deletePost = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'DELETE',
});
if (response.ok) {
console.log('Post deleted successfully.');
} else {
console.error('Failed to delete post. Status:', response.status);
}
} catch (error) {
console.error('Error deleting post:', error);
}
};
deletePost();🧠 Pro Tip: Handle HTTP Errors Manually
The Fetch API does not throw an error for HTTP error status codes (e.g., 404 or 500). You need to check response.ok yourself.
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Fetch failed:', error);
}
};📋 Summary Table
| HTTP Method | Description | Example Use Case |
|---|---|---|
| GET | Read data | Fetch list of blog posts |
| POST | Create new data | Submit a new post |
| PUT | Replace entire resource | Update all fields of a post |
| PATCH | Update part of resource | Modify title or description |
| DELETE | Remove data | Delete a post by ID |
⚔️ Fetch API vs Axios (Quick Glance)
| Feature | Fetch API | Axios |
|---|---|---|
| Native Support | ✅ | ❌ |
| Automatic JSON | ❌ | ✅ |
| Interceptors | ❌ | ✅ |
| Timeout | ❌ | ✅ |
| Response Errors | Manual | Automatic |
| Lightweight | ✅ | ❌ (external dependency) |
🎁 Bonus: Fetch Wrapper for Reusability
const fetchJson = async (url, options = {}) => {
const response = await fetch(url, options);
if (!response.ok) throw new Error(`Error: ${response.status}`);
return await response.json();
};🧩 Conclusion
The Fetch API is a modern, native way to interact with HTTP resources — whether it's creating, reading, updating, or deleting data.
✅ Use Fetch for:
- Lightweight and browser-native HTTP calls
- Simple use cases where you don’t need interceptors or advanced features
❗ Use Axios if you:
- Need advanced features like interceptors, request cancellation, or automatic transformation