> 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-terms.md).

# API Terms

আজকের সফটওয়্যার দুনিয়ায় API (Application Programming Interface) হলো সেই সেতু, যা একটি অ্যাপ্লিকেশনকে অন্য একটি অ্যাপ্লিকেশনের সাথে যোগাযোগ করতে দেয়। এটি যেন একটি কাস্টমার আর রেস্টুরেন্টের ওয়েটারের মতো—আপনি (ক্লায়েন্ট) কী চান তা জানালে, API সেটা রান্নাঘর (সার্ভার) থেকে এনে দেয়।

কিন্তু এই API দুনিয়ায় ঢুকলেই আপনি এমন অনেক টার্ম শুনবেন যা প্রথমে একটু জটিল লাগতে পারে — যেমন: **Endpoint**, **Payload**, **Authentication**, **Rate Limiting**, কিংবা **Over-fetching**।

এই টার্মগুলো না বুঝে API নিয়ে কাজ করা অনেকটা মানচিত্র ছাড়াই অজানা শহরে ঘোরার মতো!

তাই এই তালিকায় আমরা আপনাকে পরিচয় করিয়ে দেব API-সম্পর্কিত সবচেয়ে গুরুত্বপূর্ণ ও বহুল ব্যবহৃত টার্মগুলোর সাথে — সংক্ষেপে, বাংলায়, এবং পরিষ্কারভাবে।\
চলুন শুরু করি, আর API-এর জগতে নিজের অবস্থান আরও শক্ত করি!

***

### **Basic Terms**

1. **API (Application Programming Interface)**\
   – সফটওয়্যারের মধ্যে ডেটা আদান-প্রদানের একটি নিয়মিত উপায়।
2. **Endpoint**\
   – API-র নির্দিষ্ট URL যেটা দিয়ে ডেটা পাঠানো বা আনা হয়।
3. **Request**\
   – ক্লায়েন্ট যখন সার্ভারে কিছু চায় (যেমন ডেটা), তখন সেটা রিকুয়েস্ট।
4. **Response**\
   – সার্ভার রিকুয়েস্টের Response হিসেবে যে ডেটা পাঠায়।
5. **Client**\
   – যে সফটওয়্যার বা ব্রাউজার API কল করে।
6. **Server**\
   – API হোস্ট করে এবং রেসপন্স দেয়।
7. **Resource**\
   – যেকোনো ডেটা বা অবজেক্ট (যেমন: user, product) যা API এক্সপোজ করে।
8. **URI (Uniform Resource Identifier)**\
   – একটি রিসোর্সকে শনাক্ত করার ঠিকানা।
9. **URL (Uniform Resource Locator)**\
   – ওয়েব ঠিকানা যা API কল করার জন্য ব্যবহার হয়।
10. **HTTP (Hypertext Transfer Protocol)**\
    – API কমিউনিকেশন এর জন্য ব্যবহৃত প্রোটোকল।

***

### **HTTP Methods**

11. **GET**\
    – সার্ভার থেকে ডেটা আনার জন্য।
12. **POST**\
    – সার্ভারে নতুন ডেটা পাঠানোর জন্য।
13. **PUT**\
    – পুরোনো ডেটা পুরোপুরি আপডেট করার জন্য।
14. **PATCH**\
    – আংশিকভাবে ডেটা আপডেট করার জন্য।
15. **DELETE**\
    – ডেটা মুছে ফেলার জন্য।

***

### **API Types**

16. **REST**\
    – জনপ্রিয় ও সহজবোধ্য API ডিজাইন স্টাইল।
17. **GraphQL**\
    – ক্লায়েন্ট যা চায় শুধু সেটাই রিকুয়েস্ট করতে পারে এমন ফ্লেক্সিবল API।
18. **SOAP**\
    – XML ভিত্তিক জটিল API প্রোটোকল।
19. **WebSocket**\
    – রিয়েল-টাইম bidirectional কমিউনিকেশনের জন্য ব্যবহৃত হয়।
20. **gRPC**\
    – দ্রুত ও কম ব্যান্ডউইথে কমিউনিকেশন করার জন্য Google-এর তৈরি API ফ্রেমওয়ার্ক।

***

### **Authentication & Security**

21. **API Key**\
    – অ্যাক্সেস কন্ট্রোল করার জন্য ব্যবহৃত একটি ইউনিক কী।
22. **OAuth 2.0**\
    – থার্ড-পার্টি অ্যাপকে ইউজারের পারমিশন নিয়ে ডেটা অ্যাক্সেস করার অনুমতি দেয়।
23. **JWT (JSON Web Token)**\
    – ইউজার অথেন্টিকেশন ও তথ্য ট্রান্সফার করার জন্য এনকোড করা টোকেন।
24. **Token-based Authentication**\
    – একবার লগইন করে টোকেন দিয়ে পরবর্তী রিকুয়েস্ট করা যায়।
25. **CORS (Cross-Origin Resource Sharing)**\
    – ভিন্ন origin থেকে API অ্যাক্সেস করার অনুমতি নিয়ন্ত্রণ করে।
26. **Rate Limiting**\
    – নির্দিষ্ট সময়ে কতটি API রিকুয়েস্ট করা যাবে তা নিয়ন্ত্রণ করে।
27. **Throttling**\
    – অতিরিক্ত রিকুয়েস্ট হলে ধীরে রেসপন্স দেয় বা ব্লক করে।

***

### **Data Format**

28. **JSON**\
    – হালকা ও জনপ্রিয় ডেটা বিন্যাস (JavaScript Object Notation)।
29. **XML**\
    – ট্যাগ-ভিত্তিক ডেটা ফরম্যাট, SOAP API-তে বেশি ব্যবহৃত হয়।
30. **YAML**\
    – সহজ পঠনযোগ্য কনফিগারেশন বা ডেটা লেখার ফরম্যাট।
31. **Form Data / URL Encoded**\
    – ফর্মের ডেটা HTTP রিকুয়েস্টে পাঠানোর পদ্ধতি।

***

### **API Documentation & Tools**

32. **Swagger / OpenAPI**\
    – API কীভাবে কাজ করে তা ডকুমেন্ট ও টেস্ট করার টুল।
33. **Postman**\
    – API টেস্টিং, রিকুয়েস্ট পাঠানো ও রেসপন্স দেখা যায় সহজে।
34. **Insomnia**\
    – আরেকটি জনপ্রিয় API টেস্টিং টুল।
35. **API Gateway**\
    – অনেক API রিকুয়েস্টকে একটি Central পয়েন্টে পরিচালনা করে।
36. **API Versioning**\
    – API পরিবর্তন করলে আগের ভার্সন রাখা হয় যাতে আগের ক্লায়েন্ট ব্রেক না হয়।

***

### **Performance & Optimization**

37. **Over-fetching**\
    – প্রয়োজনের চেয়ে বেশি ডেটা পাওয়া।
38. **Under-fetching**\
    – প্রয়োজনের চেয়ে কম ডেটা পাওয়া।
39. **Pagination**\
    – বড় ডেটা ভাগ করে একাধিক পেজে দেওয়া।
40. **Caching**\
    – আগের রিকুয়েস্টের রেসপন্স সংরক্ষণ করে পুনরায় দ্রুত রেসপন্স দেওয়া।
41. **Latency**\
    – রিকুয়েস্ট পাঠানো থেকে রেসপন্স পাওয়া পর্যন্ত সময়।
42. **Timeout**\
    – নির্দিষ্ট সময়ের মধ্যে রেসপন্স না পেলে কনেকশন বন্ধ হয়ে যাওয়া।
43. **Webhooks**\
    – সার্ভার থেকে ক্লায়েন্টকে ডেটা "push" করার মেকানিজম।
