How to Design Effective and Safe APIs
১. 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 ঠিকানা থেকে প্রতি মিনিটে সর্বোচ্চ ১০০টি রিকোয়েস্ট
একজন ইউজার প্রতি ঘণ্টায় সর্বোচ্চ ১০০০টি রিকোয়েস্ট
ভারি অ্যাকশন (যেমন সার্চ) আলাদা লিমিট
