ভাল-ডিজাইন করা REST APIগুলি ব্যবহারে স্বজ্ঞাত, সামঞ্জস্যপূর্ণ এবং বজায় রাখা সহজ৷ 2026 সালে, REST সর্বজনীন-মুখী পরিষেবাগুলির জন্য প্রভাবশালী API শৈলী হিসাবে রয়ে গেছে, যখন GraphQL এবং gRPC নির্দিষ্ট ব্যবহারের ক্ষেত্রে পরিবেশন করে। এই নির্দেশিকাটি শীর্ষস্থানীয় কোম্পানিগুলিতে ব্যবহৃত REST API ডিজাইন নীতিগুলি এবং প্যাটার্নগুলিকে কভার করে৷
📋 Table of Contents
URL ডিজাইন — রিসোর্স-কেন্দ্রিক
Good REST URL design:
Resources = nouns (not verbs!)
/users ✓ (not /getUsers)
/users/123 ✓ (not /getUserById?id=123)
/users/123/posts ✓ (nested resources)
HTTP methods define the action:
GET /users → list users
POST /users → create user
GET /users/123 → get user 123
PUT /users/123 → replace user 123 (full update)
PATCH /users/123 → partial update user 123
DELETE /users/123 → delete user 123
Use plural nouns:
/users not /user
/posts not /post
/items not /item
Versioning:
/api/v1/users → version in URL path (most common)
Header: Accept: application/vnd.api+json;version=1 → header versioning
HTTP স্ট্যাটাস কোড
2xx Success:
200 OK — GET success, PUT/PATCH success
201 Created — POST success (include Location header)
204 No Content — DELETE success, PATCH with no body
206 Partial Content — paginated response
4xx Client Errors:
400 Bad Request — malformed request, validation error
401 Unauthorized — not authenticated (missing/invalid token)
403 Forbidden — authenticated but not authorized
404 Not Found — resource doesn't exist
409 Conflict — duplicate resource (unique constraint)
422 Unprocessable — validation failed (preferred over 400 for validation)
429 Too Many Requests — rate limited
5xx Server Errors:
500 Internal Server Error — generic server error
502 Bad Gateway — upstream service failed
503 Service Unavailable — server down/overloaded
504 Gateway Timeout — upstream timeout
রেসপন্স ফরম্যাট কনভেনশন
{
"data": {
"id": 1,
"name": "Alice Chen",
"email": "alice@example.com",
"createdAt": "2026-05-29T10:00:00Z"
}
}
// List response with pagination
{
"data": [...],
"meta": {
"total": 500,
"page": 1,
"perPage": 20,
"totalPages": 25
},
"links": {
"self": "/api/v1/users?page=1",
"next": "/api/v1/users?page=2",
"last": "/api/v1/users?page=25"
}
}
// Error response
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"details": [
{ "field": "email", "message": "Invalid email format" },
{ "field": "age", "message": "Must be 13 or older" }
]
}
}
প্রমাণীকরণ নিদর্শন
JWT Bearer Token (most common for APIs):
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
API Keys (for service-to-service):
X-API-Key: my-api-key-here
OR: ?api_key=xxx (less secure, shows in logs)
OAuth 2.0 (for user-facing apps with third-party auth):
Authorization Code Flow → access_token + refresh_token
Best practices:
- Short-lived access tokens (15 min)
- Refresh tokens for "remember me"
- Always use HTTPS
- Rotate API keys periodically
ফিল্টারিং, বাছাই, পেজিনেশন
Filtering:
GET /users?status=active&role=admin
GET /posts?author_id=123&published=true
Sorting:
GET /users?sort=name&order=asc
GET /posts?sort=-created_at (minus = descending)
Pagination:
Offset (simple):
GET /users?page=2&per_page=20
(skip = (page-1) * per_page)
Cursor (scalable for large datasets):
GET /users?cursor=eyJpZCI6MTAwfQ&limit=20
Response includes next_cursor for next page
Keyset (fastest for ordered data):
GET /users?after_id=1000&limit=20
Field selection (reduce payload):
GET /users?fields=id,name,email
হার সীমিত শিরোনাম
Response headers for rate limiting:
X-RateLimit-Limit: 100 # max requests per window
X-RateLimit-Remaining: 87 # remaining requests
X-RateLimit-Reset: 1717000000 # Unix timestamp when limit resets
Retry-After: 30 # seconds to wait (on 429 response)
OpenAPI/ Swagger ডকুমেন্টেশন
openapi: 3.1.0
info:
title: TechPulse API
version: 1.0.0
paths:
/users:
get:
summary: List users
parameters:
- name: page
in: query
schema: { type: integer, default: 1 }
responses:
'200':
description: List of users
content:
application/json:
schema:
$ref: '#/components/schemas/UserList'
post:
summary: Create user
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
responses:
'201': { description: User created }
'422': { description: Validation error }
2026 সালে REST API ডিজাইন: রিসোর্স-কেন্দ্রিক URL ব্যবহার করুন, সঠিক HTTP পদ্ধতি এবং স্ট্যাটাস কোড, সামঞ্জস্যপূর্ণ JSON প্রতিক্রিয়া বিন্যাস, প্রথম দিন থেকে সংস্করণ এবং OpenAPI ডকুমেন্টেশন। Swagger/OpenAPI স্পেক কোড জেনারেশন, ডকুমেন্টেশন এবং টেস্টিং চালায়। আপনার API এমনভাবে ডিজাইন করুন যেন বহিরাগত বিকাশকারীরা এটি ব্যবহার করবে – তারা হয়তো একদিন।
🔗 Share this article
✍️ Leave a Comment