Skip to main content

Command Palette

Search for a command to run...

How to Design Effective and Safe APIs

Updated
3 min read

১. Resource Names

নিয়ম:
বিশেষ্য (nouns) ব্যবহার করা প্রয়োজন। ক্রিয়া (verb) যেমন query, get URL-এ ব্যবহার অনুচিত।

ভুল: GET /querycarts/123
ঠিক: GET /carts/123

বহুবচন (plurals) ব্যবহার করা আবশ্যক:
ভুল: GET /cart/123
ঠিক: GET /carts/123

ব্যাখ্যা: /carts বলতে সব কার্টের তালিকা বোঝায়, আর /carts/123 বলতে একটি নির্দিষ্ট কার্ট বোঝায়।


২. Idempotency (একই রিকোয়েস্ট বারবার দিলে একই ফলাফল)

POST রিকোয়েস্ট আইডেম্পোটেন্ট নয়। ফলে একই ডাটা বারবার পাঠালে একাধিক কার্ট তৈরি হওয়ার সম্ভাবনা থাকে।

সমাধান:
রিকোয়েস্টের সাথে requestId পাঠানো প্রয়োজন। সার্ভার এই ID আগে ব্যবহার হয়েছে কি না তা যাচাই করে।

json

POST /carts
{ "requestId": 4321 }

GET স্বাভাবিকভাবেই আইডেম্পোটেন্ট – বারবার ডাকলেও একই ফলাফল ফেরত আসে।


৩. Versioning

API পরিবর্তন হলে পুরনো ক্লায়েন্টের কাজ বিঘ্নিত না করার জন্য ভার্সন দেওয়া জরুরি।

ভুল: GET /carts/v1/123
ঠিক: GET /v1/carts/123
(ভার্সন শুরুতে রাখা অধিক স্ট্যান্ডার্ড)


৪. Soft Deletion (মুছে ফেলা ডাটা দেখানো)

যদি কার্ট সফট ডিলিট করা থাকে (ডাটাবেসে উপস্থিত কিন্তু দেখানো হয় না), তখন ক্যোয়ারি প্যারামিটারের মাধ্যমে তা জানানো যায়:

  • শুধু সক্রিয় কার্ট: GET /carts

  • ডিলিট করা কার্টসহ: GET /carts?includeDeleted=true


৫. Pagination

একবারে সব ডাটা এনে সার্ভার ও নেটওয়ার্কে চাপ সৃষ্টি করা অনুচিত।

উদাহরণ:
GET /carts?pageSize=10&pageToken=abc123

  • pageSize = কতটি রেকর্ড চাওয়া হচ্ছে

  • pageToken = পরবর্তী পৃষ্ঠার টোকেন


৬. Sorting

GET /items?sort_by=time → সময় অনুযায়ী সাজানো হবে।

উন্নত পদ্ধতি: sort_by=-created_at (minus চিহ্ন মানে descending)


৭. Filtering

GET /items?filter=color:red → শুধুমাত্র লাল রঙের আইটেম দেখানো হবে।


৮. Secure Access

API-তে অনুমতিবিহীন প্রবেশ ঠেকাতে:

  • X-API-KEY=xxx – কে রিকোয়েস্ট পাঠাচ্ছে তা শনাক্ত করে

  • X-REQUEST-SIGNATURE=xxx – রিকোয়েস্টে কোনো পরিবর্তন হয়নি তা প্রমাণ করে

টিকা: ছবিতে একই বিষয় দুইবার লেখা হয়েছে – সেগুলো আলাদা উদাহরণ নয়।


৯. Resource Cross Reference (রিলেশন দেখানো)

মনে করা যাক, কার্ট 123-এর ভেতরের আইটেম 321 বোঝাতে হবে:

  • উত্তম ডিজাইন: GET /carts/123/items/321

  • অস্পষ্ট ডিজাইন: GET /carts/123?item=321


১০. কার্টে আইটেম যোগ করার নিয়ম

ভুল (কোয়েরি প্যারামিটারে action):
POST /carts/123?addItem=321

ঠিক (resource-based):
POST /carts/123/items:add
বডির ভিতর: { "itemId": "items/321" }

অথবা সরাসরি পদ্ধতি:
POST /carts/123/items
বডির ভিতর: { "id": "321" }


১১. Rate Limit (কতবার ডাকা যাবে তার সীমা)

API-কে DDoS বা অতিরিক্ত ব্যবহারের হাত থেকে রক্ষা করতে রেট লিমিট নির্ধারণ করা আবশ্যক।

ভুল: কোনো সীমা না থাকা
ঠিক: IP, ইউজার, অ্যাকশনের ধরন অনুযায়ী নিয়ম তৈরি করা

উদাহরণ:

  • একটি IP ঠিকানা থেকে প্রতি মিনিটে সর্বোচ্চ ১০০টি রিকোয়েস্ট

  • একজন ইউজার প্রতি ঘণ্টায় সর্বোচ্চ ১০০০টি রিকোয়েস্ট

  • ভারি অ্যাকশন (যেমন সার্চ) আলাদা লিমিট

More from this blog

Proxy vs Reverse Proxy

ইন্টারনেট দুনিয়ায় 'প্রক্সি' কথাটির মানে হলো 'কারো হয়ে কাজ করে দেওয়া'। নেটওয়ার্কিং-এর ক্ষেত্রে প্রক্সি সার্ভার হলো এমন একটি মাধ্যম যা ক্লায়েন্ট (ব্যবহারকারী) এবং সার্ভার (ওয়েবসাইট)-এর মাঝে দাঁড়

Apr 10, 20263 min read

How to Design Secure Web API Access

ইন্টারনেটে যখন আমরা কোনো এপিআই (API) ব্যবহার করি, তখন সবচেয়ে বড় চিন্তার বিষয় থাকে সিকিউরিটি। অর্থাৎ, যে ব্যক্তি এপিআইটি কল করছে, সে আসলে সঠিক ব্যক্তি কি না? এটি নিশ্চিত করার জন্য প্রধানত দুটি জনপ্রিয়

Apr 10, 20263 min read

যখন আপনি ব্রাউজারে একটি URL টাইপ করেন তখন কী ঘটে? | What Happens When You Type a URL Into Your Browser? (Simple Explanation)

ধাপ ১: বব URL টাইপ করে বব তার ব্রাউজারে টাইপ করে: http://example.com/product/electric/phone এখানে: http:// = স্কিম (কীভাবে সংযোগ করতে হবে বলে) example.com = ডোমেইন নাম (ওয়েবসাইটের ঠিকানা) product/

Apr 10, 20261 min read

Untitled Publication

12 posts