API مثل منوی رستوران و قواعد سفارش است. مشتری نمیرود داخل آشپزخانه؛ از روی قرارداد مشخص غذا میخواهد. کلاینتها، تیمهای دیگر و حتی سرویسهای داخلی تو، همه به همین قرارداد تکیه میکنند. اگر امروز بینظم باشد، فردا هیچکس جرئت تغییرش را ندارد.

API خوب سه حس دارد: قابل حدس است، بیخودی عوض نمیشود، و وقتی خطا میدهد رودربایستی ندارد. این درس همان قرارداد را یاد میدهد — نه اینکه کدام فریمورک را نصب کنی.
REST: پیشفرض دنیای وب
REST چیز مرموزی نیست. میگوید دنیا را به Resource تقسیم کن — گفتگو، پیام، سفارش — به هر کدام یک URL بده، و کار را با متدهای HTTP بگو. قدرت آن در یکنواختی است: آدم تازهوارد بدون سند بلند هم میتواند حدس بزند «لیست را چطور بگیرم» و «یکی را چطور حذف کنم».
| متد | معنا | Idempotent؟ |
|---|---|---|
| GET | خواندن منبع؛ نباید چیزی را عوض کند | بله |
| POST | ساختن چیز تازه، یا شروع یک کار | خیر |
| PUT | جایگزینی کامل همان منبع | بله |
| PATCH | ویرایش جزئی | معمولاً خیر |
| DELETE | حذف | بله |
Idempotent یعنی بار دوم همان کار، اثر تازه نسازد. دو بار GET فقط دو بار خواندن است. دو بار POST معمولاً دو سفارش میسازد — و همین برای پرداخت خطرناک است.
GET /v1/chats?cursor=abc&limit=20 لیست گفتگوها
POST /v1/chats/42/messages ارسال پیام
GET /v1/messages/97 یک پیام
DELETE /v1/messages/97 حذف پیامچهار چیزی که تازهکارها فراموش میکنند
متد و URL فقط پوستهاند. بیشتر درد تولید از این چهار تا میآید.
وقتی REST تنها ابزار نیست
REST پیشفرض خوبی است، نه مذهب. گاهی شکل حرف زدن باید عوض شود. اول مسئله را بگو، بعد ابزار را انتخاب کن.
| سبک | بهترین جا | هزینه |
|---|---|---|
| GraphQL | چند جور کلاینت که هر کدام برش متفاوتی از داده میخواهند | پیچیدگی سرور بیشتر؛ Cache کردن سختتر |
| gRPC | حرف زدن سرویس با سرویس داخل شبکه خودت؛ سریع و با قرارداد سفت protobuf | برای مرورگر معمولی مناسب نیست |
| WebSocket | خط دوطرفه زنده: چت، قیمت لحظهای، بازی | باید اتصالهای باز را نگه داری و مقیاس بدهی |
| Webhook | خبر دادن به سیستم بیرونی وقتی اتفاقی افتاد — مثلاً «پرداخت شد» | باید retry داشته باشد و امضا شود تا جعلی نیاید |
به زبان ساده
API منوی رستوران سیستم توست: بقیه از روی قرارداد مشخص سفارش میدهند، نه از داخل آشپزخانه.
مثال واقعی
اپ تاکسی برای ثبت سفر یک فرم استاندارد میفرستد؛ اگر اینترنت قطع شد همان Idempotency-Key نمیگذارد دو سفر ثبت شود.