> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/api/api-over-fetching-and-under-fetching.md).

# API Over-fetching and Under-fetching

যখন আমরা একটি API (Application Programming Interface) ব্যবহার করে ডেটা রিকুয়েস্ট করি, তখন আমরা সবসময় আমাদের প্রয়োজনমতো ডেটা চাই। কিন্তু অনেক সময় দেখা যায়, আমরা হয় **প্রয়োজনের চেয়ে বেশি ডেটা পাচ্ছি (Over-fetching)**, নয়তো **প্রয়োজনের চেয়ে কম ডেটা পাচ্ছি (Under-fetching)**। এই দুটি সমস্যাই অ্যাপের পারফরম্যান্স, ব্যান্ডউইথ এবং ইউজার এক্সপেরিয়েন্সে প্রভাব ফেলে।

***

### Over-fetching: প্রয়োজনের চেয়ে বেশি ডেটা পাওয়া

**Over-fetching** ঘটে যখন API এমন সব ডেটা রিটার্ন করে যা ক্লায়েন্ট অ্যাপের প্রয়োজন নেই। এতে নেটওয়ার্ক ব্যান্ডউইথ অপচয় হয় এবং পারফরম্যান্স কমে।

#### উদাহরণ:

ধরা যাক, একটি ই-কমার্স ওয়েবসাইটে ইউজার প্রোফাইল পেজ লোড করার সময় শুধুমাত্র ইউজারের **নাম** এবং **প্রোফাইল ছবি** দরকার।

কিন্তু API রিটার্ন করে নিচের মতো সম্পূর্ণ তথ্য:

```json
{
  "id": 101,
  "name": "Mominur Rahman",
  "email": "mominur@example.com",
  "phone": "017XXXXXXXX",
  "profile_picture": "profile.jpg",
  "shipping_address": "...",
  "order_history": [...],
  "wishlist": [...]
}
```

> এখানে শুধু `name` এবং `profile_picture` দরকার ছিল, কিন্তু আমরা অনেক বেশি ডেটা পাচ্ছি — এটিই Over-fetch।

***

### Under-fetching: প্রয়োজনের চেয়ে কম ডেটা পাওয়া

**Under-fetching** ঘটে যখন API প্রয়োজনীয় সব তথ্য একসাথে দেয় না, ফলে ক্লায়েন্টকে একাধিক API কল করতে হয় সম্পূর্ণ তথ্য পাওয়ার জন্য।

#### উদাহরণ:

ধরা যাক, আপনি একটি ব্লগ পেজ বানাচ্ছেন যেখানে পোস্টের সাথে সাথে লেখকের নাম ও প্রোফাইল ছবিও দেখাতে চান।

আপনি `/posts` API হিট করলে নিচের মতো রেসপন্স আসে:

```json
{
  "id": 12,
  "title": "GraphQL vs REST",
  "content": "Lorem ipsum...",
  "author_id": 7
}
```

এরপর আপনাকে আবার `/users/7` এ হিট করতে হয় লেখকের নাম ও ছবি পাওয়ার জন্য।

> এতে একাধিক API কল করতে হচ্ছে — এটিই Under-fetch।

***

### সমাধান ও পরামর্শ

| সমস্যা      | সমাধান                                                                                    |
| ----------- | ----------------------------------------------------------------------------------------- |
| Over-fetch  | GraphQL এর মতো API ব্যবহার করা যায়, যেখানে ক্লায়েন্ট চায় এমন ডেটা নির্দিষ্ট করে দিতে পারে |
| Under-fetch | API Endpoint গুলোকে আরও optimized করা, যেমন nested বা embedded রিসোর্স ফিরিয়ে দেওয়া       |

***

API Design-এর ক্ষেত্রে Over-fetch এবং Under-fetch হলো খুব সাধারণ কিন্তু গুরুত্বপূর্ণ সমস্যা। এগুলো ভালোভাবে বুঝে API তৈরি করলে অ্যাপ আরও responsive ও efficient হয়। REST API-তে এই সমস্যাগুলো বেশি দেখা যায়, আর GraphQL ব্যবহার করলে অনেকটাই সমাধান সম্ভব হয়।
