system-design-bangla

Principal of REST API

Client এবং Server পৃথক

REST Architecture এর প্রধান Principal হল Client এবং Server পৃথক থাকতে হবে। Client শুধু Request করবে এবং Server Response দিবে। User Interface এবং Data Storage পৃথক থাকবে।

Stateless

প্রতিটি Api এর Request এবং Response পূর্বের এবং পরবর্তী Request এবং Response উপর কোনো নির্ভর করবে না।

Cacheable

Stateless হওয়ার পরেও আমরা Request এবং Response কে Cache করতে পারব।

REST Api মূলত ৫’টি প্রধান HTTP Methods দ্বারা স্টেট ট্রান্সফার নিশ্চিত করে থাকে।

GET

GET ম্যাথোড ব্যবহারের মাধ্যমে ক্লায়েন্ট কিছু স্পেসিফিক রির্সোস এর জন্য সার্ভারকে রিকুয়েস্ট করতে পারবে।

যেমন, ক্লায়েন্ট ইউজারদের লিস্ট এর জন্য রিকুয়েস্ট করতে পারে,

GET request

POST

POST ম্যাথোড ব্যবহার করা হয় নতুন রিসোর্স তৈরি করার লক্ষ্যে, ক্লায়েন্ট সার্ভারকে রিকুয়েস্ট করতে পারে।

যেমন, ক্লায়েন্ট নতুন ইউজার তৈরি করতে সার্ভারকে POST রিকুয়েস্টের মাধ্যমে রিকুয়েস্ট করতে পারে,

POST request

PUT

PUT ম্যাথোড ব্যবহার করা হয় নতুন রিসোর্স তৈরি করার লক্ষ্যে কিংবা কোন স্পেসিফিক রিসোর্সকে পরিবর্তন করতে।

যেমন, ক্লায়েন্ট সার্ভারকে রিকুয়েস্ট করতে পারে কোন ইউজারের নাম পরিবর্তন করতে,

PUT request

PATCH

PATCH ম্যাথোড ব্যবহার করা হয় কোন স্পেসিফিক রিসোর্সের স্পেসিফিক ভ্যালু পরিবর্তন করতে।

যেমন, ক্লায়েন্ট সার্ভারকে রিকুয়েস্ট করতে পারে কোন ইউজারের শুধু ইমেইল পরিবর্তন করতে,

PATCH request

DELETE

DELETE ম্যাথোড ব্যবহার করা হয় কোন স্পেসিফিক রিসোর্স ডিলিট করতে।

যেমন, ক্লায়েন্ট সার্ভারকে রিকুয়েস্ট করতে পারে কোন স্পেসিফিক ইউজার ডিলিট করতে যার নাম হবে John,

DELETE request

POST এবং PUT এর মধ্যে পার্থক্য

POST এবং PUT এর মধ্যে পার্থক্য হল, POST সবসময় নতুন রিসোর্স তৈরি করে থাকে যেখানে PUT হল idempotent মানে রিসোর্স যদি ইতিমধ্যে থাকে তাহলে সে আর নতুন রিসোর্স তৈরি করবে না।

PUT এবং PATCH এর মধ্যে পার্থক্য

PUT এবং PATCH এর মধ্যে পার্থক্য হল, PUT এর ক্ষেত্রে ক্লায়েন্ট একটি স্পেসিফিক ডাটার কিছু পরিবর্তন করতে চাইলে তাকে সেই ডাটার সম্পূর্ণ Attributes সার্ভারকে দিতে হবে এবং PATCH এর ক্ষেত্রে ক্লায়েন্ট সেই ডাটার যে Attribute পরিবর্তন হবে সেই Attribute টাই শুধু সার্ভারকে দিতে হবে।

HTTP Headers

REST API তে Client এবং Server একে অপরের মধ্যে কিছু অতিরিক্ত তথ্য আদান-প্রধান করতে পারে তা করা হয় HTTP Headers ব্যবহার করে।

HTTP Headers কে ৪ category তে ভাগ করা হয়,

REST API best practices

router.get("/users", (req, res) => {
  res.status(200).json(users); // response format is JSON
});
--- recommanded ---
'/users'
'/users/{id}'
'/products'

--- not recommanded ---
'/get-users'
'/get-user'
'/fetch-products'

{api_endpoint}/posts?tags=react

? এর পরের অংশটুকু হল Query Parameters.

Rest API security best practices

Rest API performance best practices

Caching

Caching নিয়ে আমার লিখা পড়তে পারেন

CDN

Caching নিয়ে আমার লিখা পড়তে পারেন

Pagination

২ রকমের pagination techniques আমাদের কাছে আছে। Offset এবং Cursor। আমাদের requirements এর উপর ভিত্তি করে আমরা pagination technique ব্যবহার করব।

Data Compression

Data Compressed করলে আমরা API response এর size কমাতে পারবো।

Unnecessary property send to payload and response

Payload এবং Response এর মধ্যে অপ্রয়োজনীয় প্রপার্টি(object, array) পাঠাবো না।

HTTP Status Code

HTTP Status Code আমাদেরকে বলে দেয় একটি নির্দিষ্ট HTTP Method(GET, POST, PUT) এর রিকুয়েস্ট সাকসেসফুল হয়েছে কি না।

এটি ব্যবহার করা একটি উওম প্রাকটিস বলে গণ্য করা হয়।

HTTP Status Code কে পাঁচ শ্রেণিতে ভাগ করা হয়,

নিচে কিছু HTTP Status Code এর নির্দিষ্ট ব্যবহার বলা হল,

আরও জানতে এই লিংকে যেতে পারেন, https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

REST API এবং GraphQL এর মধ্যে পার্থক্য

Idempotent API

যেসব API এমন কোনো রিসোর্স তৈরী করে না যা ইতিমধ্যে তৈরী হয়ে রয়েছে, সেই API গুলোকে Idempotent API বলে। GET, PUT এবং DELETE এগুলো Idempotent API। আর POST এবং PATCH Idempotent API নয়।

আপনি যখন GET api ব্যবহার করে বার বার কিংবা api retry করে api call করবেন তখন আপনি নির্দিষ্ট রিসোর্স পাবেন, ডেটাবেসে কোনো নতুন রিসোর্স তৈরী হবে না। একই ভাবে PUT এবং DELETE এর ক্ষেত্রেও সমান, ঐখানে নতুন রিসোর্স তৈরী হবে না বরং নির্দিষ্ট রিসোর্স আপডেট এবং ডিলিট হবে। যেখানে POST এবং PATCH সবসময় নতুন রিসোর্স তৈরী করবে।

Why and how to make an API Idempotent

ধরুন আপনি কোনো কিছুর জন্য Payment করছেন, আপনি Payment button click করার পর আপনার রিকোয়েস্ট সার্ভারে প্রসেস হচ্ছে এখন প্রসেস হওয়ার সময় আপনি কোনোভাবে আবার Payment button click করলেন। এখন সার্ভারের কাছে আপনার দুটি রিকোয়েস্ট আছে, সার্ভার আপনার দুটি payment request প্রসেস করবে। এতে করে আপনার payment একবার এর জায়গায় দুবার (payment) হয়ে গেলো।

এরকম আরো অনেক scenario আছে যেখানে API মানে POST API Idempotent না হওয়ার কারণে আপনার সিস্টেম এর End User এর ক্ষতি হতে পারে।

এই সমস্যার সমাধানের জন্য আমরা একটি পদ্ধতি মেনে চলতে পারি,

——– এতেই প্রথমবারের মত API request তার response পেয়ে যাবে ——-