این مقاله درباره

API چیست

API چیست و چگونه نرم‌افزارها را به هم متصل می‌کند؟ REST، GraphQL، طراحی endpoint، مستندسازی، احراز هویت، خطا، نسخه‌بندی و امنیت API را توضیح می‌دهیم.

API چیست؟ نقش REST و GraphQL در اتصال سایت، اپ و پنل

نوشته شده توسط محمد اصل زنجانی

بازبینی‌شده توسط روبینش

اولین نظر را بدهید — امتیاز خوانندگان روبینش

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

جست‌وجوهایی مثل «API چیست»، «REST API چیست»، «GraphQL چیست»، «چرا کسب‌وکار به API نیاز دارد»، «مستندسازی API» و «امنیت API» نشان می‌دهند کاربر از تعریف تا تصمیم فنی سؤال دارد. در این راهنما مفهوم API، نمونهٔ سادهٔ درخواست، REST و GraphQL، انتخاب بین آن‌ها، طراحی endpoint، مستندسازی، احراز هویت، خطا، نسخه‌بندی و کاربرد API در اتصال سایت، اپ و پنل را بررسی می‌کنیم. برای اجرای سامانه و API اختصاصی، خدمات توسعه نرم‌افزار روبینش صفحهٔ تجاری مرتبط است.

“APIs are the foundation for modern applications and digital experiences, enabling developers to connect data and services.”

منبع: Google Cloud — Interacting with APIs: REST and GraphQL
API به‌عنوان پل ارتباطی بین سایت، اپلیکیشن، پنل مدیریت، دیتابیس و سرویس‌های ثالث — روبینش | Rubinesh
API مرز ارتباط سیستم‌هاست؛ قرارداد روشن، امنیت و پاسخ قابل پیش‌بینی کیفیت این مرز را تعیین می‌کنند.

API چیست و چگونه کار می‌کند؟

تصور کنید اپلیکیشن فروشگاهی فهرست محصولات را از سرور می‌خواهد. اپلیکیشن یک درخواست با آدرس، روش، پارامتر و شاید token می‌فرستد. سرور درخواست را بررسی می‌کند، منطق و دسترسی را اجرا می‌کند و پاسخی شامل وضعیت، داده یا خطا برمی‌گرداند. اپلیکیشن لازم نیست بداند داده در کدام جدول دیتابیس قرار دارد؛ قرارداد API همین مرز را مدیریت می‌کند.

Client
  └── GET /api/products?category=books
          ↓
      API contract
          ↓
Server: auth → validation → business rule → database
          ↓
      200 + JSON data
      یا 4xx/5xx + error

این جداسازی چند مزیت دارد: frontend و backend می‌توانند مستقل‌تر توسعه پیدا کنند، اپ موبایل و وب از منطق مشترک استفاده کنند، سرویس ثالث به شکل کنترل‌شده متصل شود و تغییرات داخلی بدون شکستن مصرف‌کننده مدیریت گردد. اما استقلال کامل خودکار نیست؛ اگر قرارداد مبهم، پاسخ ناپایدار یا خطاها نامنظم باشند، API به‌جای پل به منبع پیچیدگی تبدیل می‌شود.

چرا کسب‌وکار به API نیاز دارد؟

API زمانی مهم می‌شود که چند کانال یا سیستم باید دادهٔ مشترک داشته باشند. سایت می‌تواند فرم را به CRM بفرستد، اپلیکیشن از همان حساب کاربری استفاده کند، پنل مدیریت سفارش را تغییر دهد و سرویس پیامک از رویداد خرید مطلع شود. بدون API، تیم‌ها به ورود دستی، فایل‌های دوره‌ای یا اتصال‌های شکننده وابسته می‌شوند. مقالهٔ اتوماسیون فرآیند کسب‌وکار توضیح می‌دهد این اتصال‌ها چطور بخشی از گردش کار می‌شوند. اگر مسئله‌تان نقشهٔ پرداخت، پیامک و CRM است نه خود قرارداد REST، یکپارچه‌سازی سیستم‌ها را بخوانید. برای خودِ اعلان رویداد وب‌هوک چیست را جدا ببینید.

  • اتصال سایت و اپلیکیشن به یک backend مشترک
  • یکپارچه‌سازی CRM، حسابداری، انبار و درگاه
  • ارائهٔ داده به شریک یا مشتری با دسترسی کنترل‌شده
  • ساخت پنل مدیریتی و گزارش از سرویس‌های عملیاتی
  • پردازش پرداخت، پیامک، ایمیل، نقشه یا احراز هویت ثالث
  • ساخت محصول SaaS با چند مشتری و سطح دسترسی جدا

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

REST API چیست؟

REST یک سبک معماری برای سرویس‌های وب است که معمولاً از HTTP، resource، روش‌های استاندارد و پاسخ‌های قابل فهم استفاده می‌کند. در یک API REST ممکن است مسیرهایی مانند `/users`، `/orders` و `/products` داشته باشید و روش GET برای خواندن، POST برای ساختن، PUT یا PATCH برای تغییر و DELETE برای حذف به کار رود. این نام‌گذاری قانون مطلق نیست، اما قرارداد منظم فهم و استفاده را آسان‌تر می‌کند.

نمونهٔ روش‌های HTTP در REST
روش کاربرد رایج نکته
GET دریافت resource نباید اثر جانبی ناخواسته داشته باشد
POST ساختن یا اجرای عملیات درخواست معمولاً دادهٔ بدنه دارد
PATCH تغییر بخشی از resource برای update محدود مناسب است
DELETE حذف resource نیازمند مجوز و رفتار روشن در تکرار

REST برای بسیاری از سایت‌ها، اپ‌ها و سرویس‌های سازمانی انتخابی قابل فهم و قابل نگهداری است. cache، status code، ابزارهای تست و مستندسازی گسترده دارد. اما REST خوب فقط چند endpoint با فعل‌های مختلف نیست؛ باید pagination، فیلتر، sort، خطا، امنیت، محدودیت نرخ و نسخه‌بندی آن هم طراحی شود. انتخاب REST به‌خاطر آشنایی تیم خوب است، اما ساختار نامنظم حتی در REST نیز مشکل ایجاد می‌کند.

GraphQL چیست و چه تفاوتی با REST دارد؟

GraphQL زبان پرس‌وجو و runtime است که به کلاینت اجازه می‌دهد در یک درخواست شکل دادهٔ مورد نیازش را مشخص کند. به‌جای دریافت پاسخ ثابت از چند endpoint، کلاینت می‌تواند fieldهای مورد نیاز را از schema درخواست کند. این ویژگی برای صفحه‌هایی که دادهٔ ترکیبی از چند منبع می‌خواهند مفید است، اما انعطاف بیشتر نیازمند کنترل پیچیدگی query، مجوز در سطح field و مدیریت cache است.

REST یا GraphQL؟
معیار REST GraphQL
شکل دریافت پاسخ تعریف‌شده در endpoint انتخاب field توسط کلاینت
ساختار چند resource و مسیر schema و معمولاً endpoint اصلی
پیچیدگی ساده‌تر برای بسیاری از سرویس‌ها نیازمند کنترل query و resolver
مناسب برای CRUD، سرویس عمومی و cache ساده دادهٔ ترکیبی و کلاینت‌های متنوع

این سؤال که کدام همیشه بهتر است پاسخ فنی ندارد. اگر مصرف‌کننده‌ها به resourceهای روشن نیاز دارند و تیم زیرساخت ساده‌ای می‌خواهد، REST انتخاب منطقی است. اگر چند کلاینت با نیازهای داده‌ای متفاوت دارید و over-fetching واقعاً مسئله است، GraphQL را بررسی کنید. گاهی هر دو در یک محصول وجود دارند؛ آنچه مهم است قرارداد، امنیت، observability و توان نگهداری تیم است.

API را چطور طراحی کنیم؟

طراحی را با مصرف‌کننده و use case شروع کنید. چه کسی endpoint را صدا می‌زند؟ چه داده‌ای لازم دارد؟ چه خطایی ممکن است رخ دهد؟ آیا درخواست تکراری باید همان نتیجه را بدهد؟ پاسخ‌ها را بیش از نیاز بزرگ نکنید و اطلاعات حساس را هرگز به‌خاطر راحتی در خروجی عمومی قرار ندهید. نام‌گذاری، نوع داده، status code و رفتار pagination باید قابل پیش‌بینی باشد.

  1. resourceها و عملیات اصلی را مشخص کنید.
  2. قرارداد request و response را قبل از کدنویسی بنویسید.
  3. احراز هویت و سطح دسترسی هر عملیات را تعیین کنید.
  4. خطاهای validation، permission، not found و server را تفکیک کنید.
  5. pagination، فیلتر، sort و محدودیت نرخ را برای داده‌های بزرگ در نظر بگیرید.
  6. رفتار retry و درخواست تکراری را مشخص کنید.
  7. تست، لاگ، متریک و هشدار را از ابتدا تعریف کنید.

API قرارداد بین تیم‌هاست، پس تغییر ناگهانی آن هزینه دارد. اگر نام field یا معنی status تغییر می‌کند، مصرف‌کننده‌ها را شناسایی و مسیر مهاجرت بدهید. نسخه‌بندی می‌تواند با URL، header یا روش دیگری انجام شود؛ انتخاب مهم‌تر از داشتن برنامه برای حذف نسخهٔ قدیمی نیست. endpointهای بلااستفاده را هم بدون اطلاع و اندازه‌گیری حذف نکنید.

مستندسازی API چرا ضروری است؟

مستندات باید به توسعه‌دهندهٔ مصرف‌کننده بگوید از کجا شروع کند، چگونه احراز هویت کند، چه پارامترهایی بفرستد، پاسخ موفق چه شکلی دارد و با خطا چه کند. نمونهٔ request و response، محدودیت نرخ، وضعیت نسخه، محیط تست و مثال‌های واقعی از متن طولانی اما مبهم ارزش بیشتری دارند. OpenAPI/Swagger، collection تست و یک quickstart می‌توانند شروع مناسبی باشند.

مستندات را کنار تغییر کد به‌روزرسانی کنید. اگر سند بعد از چند ماه با رفتار واقعی اختلاف پیدا کند، اعتماد تیم از بین می‌رود و افراد به حدس و reverse engineering روی می‌آورند. برای API عمومی، تغییرات و deprecation را اعلام کنید. برای API داخلی نیز حداقل قرارداد و مسئول پاسخ‌گویی مشخص لازم است.

امنیت API و کنترل دسترسی

امنیت API فقط به استفاده از HTTPS محدود نیست. احراز هویت می‌گوید درخواست از طرف چه کسی است؛ مجوزدهی می‌گوید همان کاربر اجازهٔ چه عملی را دارد. tokenها را امن نگه دارید، طول عمر و refresh را مدیریت کنید، دسترسی را بر اساس نقش و resource محدود کنید و ورودی را validate کنید. شناسهٔ قابل حدس نباید به کاربر اجازه دهد دادهٔ کاربر دیگر را بخواند.

  • HTTPS و secret management
  • احراز هویت و مجوزدهی جداگانه
  • Rate limiting و جلوگیری از abuse
  • اعتبارسنجی schema و اندازهٔ ورودی
  • ثبت رویدادهای حساس بدون ذخیرهٔ secret
  • محدودکردن دادهٔ پاسخ و حذف اطلاعات اضافی
  • تست دسترسی افقی و عمودی بین نقش‌ها

در GraphQL، عمق و پیچیدگی query، دسترسی fieldها و هزینهٔ resolver اهمیت ویژه دارد. در REST نیز endpointهای nested، فایل‌های آپلودی، جست‌وجو و export می‌توانند سطح حمله یا مصرف منابع را بالا ببرند. امنیت باید با threat model و دادهٔ واقعی سنجیده شود، نه با چند header تبلیغاتی.

خطا، لاگ و پایش API

کاربر API باید بتواند بفهمد درخواست چرا رد شده و آیا retry منطقی است یا نه. پاسخ خطا را یکدست کنید: code قابل ماشین، پیام قابل فهم، شناسهٔ trace و جزئیات امن. خطای validation با خطای دسترسی یا خرابی موقت سرویس یکی نیست. پیام داخلی stack trace را به مصرف‌کننده عمومی ندهید.

پایش باید latency، نرخ خطا، throughput، مصرف منابع و endpointهای کند را نشان دهد. لاگ بدون correlation ID پیدا کردن مسیر یک درخواست در چند سرویس را دشوار می‌کند. برای عملیات حساس، alert و runbook داشته باشید. API وقتی بخشی از محصول است که تیم بتواند کیفیت آن را پس از انتشار نیز ببیند و اصلاح کند.

قرارداد API شامل endpoint، احراز هویت، داده، خطا، مستندات و پایش — روبینش | Rubinesh
API قابل اعتماد فقط پاسخ موفق نیست؛ امنیت، خطا، مستندات و پایش هم بخشی از قرارداد آن هستند.

API در یک پروژهٔ کسب‌وکاری چه شکلی دارد؟

فرض کنید یک فروشگاه سایت، اپلیکیشن، پنل انبار و حسابداری دارد. سایت از API فهرست و قیمت را می‌گیرد، اپ سفارش را ثبت می‌کند، پنل وضعیت را تغییر می‌دهد و سرویس پیامک از رویداد تأیید مطلع می‌شود. در این معماری، هر سیستم لازم نیست به دیتابیس دیگری دسترسی مستقیم داشته باشد. API مرز را حفظ می‌کند و قوانین مهم را در محل مناسب اجرا می‌کند.

برای کسب‌وکار کوچک، یک API ساده و مستند ممکن است کافی باشد. سازمان بزرگ‌تر شاید به gateway، صف، نسخه‌بندی، مدیریت کلید و قراردادهای متعدد نیاز داشته باشد. از ابتدا میکروسرویس‌سازی افراطی نکنید؛ معماری باید با حجم، تیم، حساسیت و سرعت تغییر هماهنگ باشد. مقالهٔ راهنمای نرم‌افزار سفارشی و معماری قابل رشد دربارهٔ این انتخاب زمینهٔ بیشتری می‌دهد.

اشتباهات رایج در ساخت API

  • طراحی endpoint بر اساس جدول دیتابیس بدون فهم use case
  • نبود قرارداد روشن برای خطا و status code
  • انتشار اطلاعات بیش از نیاز یا دادهٔ حساس
  • نبود احراز هویت، مجوزدهی و rate limit
  • تغییر breaking بدون نسخه‌بندی یا برنامه مهاجرت
  • مستندات قدیمی و مثال‌های غیرقابل اجرا
  • نداشتن تست یکپارچه و پایش پس از انتشار
  • انتخاب GraphQL یا تجزیه به سرویس‌ها فقط به‌خاطر مد روز — جزئیات در میکروسرویس یا مونولیت

چک‌لیست شروع API

  1. مصرف‌کننده‌ها و use caseهای اصلی مشخص شده‌اند.
  2. resource، method، request و response قرارداد دارند.
  3. خطا، retry و idempotency تعریف شده است.
  4. احراز هویت و سطح دسترسی بر اساس نقش طراحی شده است.
  5. مستندات و محیط تست آماده است.
  6. تست، لاگ، trace، متریک و هشدار وجود دارد.
  7. نسخه‌بندی و سیاست deprecation نوشته شده است.
  8. API مستقیم به دیتابیس بدون مرز امنیتی دسترسی نمی‌دهد.

جمع‌بندی: API قرارداد رشد سیستم‌هاست

API رابطی برای ارتباط کنترل‌شده بین نرم‌افزارهاست. REST برای بسیاری از resourceها و سرویس‌های استاندارد مناسب است و GraphQL برای نیازهای انعطاف‌پذیر داده می‌تواند ارزش ایجاد کند؛ هیچ‌کدام بدون طراحی قرارداد، امنیت، مستندات و پایش کافی نیستند. API خوب به تیم‌ها اجازه می‌دهد محصول، سایت، اپ و سیستم‌های سازمانی را بدون کپی‌کاری و وابستگی خطرناک توسعه دهند.

قبل از انتخاب فناوری، مصرف‌کننده، داده، قانون کسب‌وکار و مسیر خطا را مشخص کنید. برای طراحی API مستند و اتصال آن به سایت، اپ یا پنل، خدمات توسعه اختصاصی روبینش و فرم مشاوره نقطهٔ شروع هستند.

سؤالات متداول

API چیست؟

API یا رابط برنامه‌نویسی کاربردی مجموعه‌ای از قراردادها و مسیرهاست که به نرم‌افزارها اجازه می‌دهد بدون دانستن جزئیات داخلی یکدیگر با هم ارتباط برقرار کنند.

REST API چیست؟

REST سبک معماری رایجی برای سرویس‌های وب است که معمولاً از HTTP، resourceها و روش‌هایی مانند GET، POST، PATCH و DELETE برای ارتباط استفاده می‌کند.

REST بهتر است یا GraphQL؟

REST برای بسیاری از resourceها و سرویس‌های استاندارد ساده و مناسب است؛ GraphQL برای کلاینت‌هایی با نیازهای داده‌ای ترکیبی می‌تواند مفید باشد. انتخاب به use case و توان نگهداری تیم بستگی دارد.

API چگونه امن می‌شود؟

HTTPS، احراز هویت، مجوزدهی، rate limit، اعتبارسنجی ورودی، محدودکردن داده پاسخ، ثبت رویداد و تست دسترسی از پایه‌های امنیت API هستند.

چرا مستندسازی API مهم است؟

مستندات به مصرف‌کننده می‌گوید چگونه احراز هویت کند، چه داده‌ای بفرستد، پاسخ و خطا چه شکلی است و محدودیت‌ها و نسخه‌بندی چگونه مدیریت می‌شوند.