
ابتدا به تعریف (Representational State Transfer) REST می پردازیم. REST یک معماری نرمافزاری برای پیاده سازی API هاست. این معماری مبتنی بر پروتکل HTTP است که پروتکلی بر اساس درخواست (Request) و پاسخ (Response) است. HTTP از متد های پیش فرض GET برای بازیابی اطلاعات، PUT برای به روز رسانی، POST برای ایجاد و DELETE برای حذف کردن منابع به کار می رود. REST معروف ترین معماری برای تولید API هاست. از مزایای REST می توان به پیادهسازی سریعتر و توسعه ساده اشاره کرد.
مجموعه ای از قواعد و مکانیزم ها که اپلیکیشن ها و یا کامپوننت های اپلیکیشن از طریق آن ها با هم ارتباط برقرار می کنند را API (Application Programming Interface) می گویند. API داده های مورد نیاز اپلیکیشن را از طریق فرمت JSON (JavaScript Object Notation) که فرمت کلید-مقدار (key-value) به خروجی ارسال می کند و از این طریق توسعه اپلیکیشن را ساده تر می کند. API جایگزین SOAP شده است که از فرمت XML برای ارسال خروجی استفاده می کرد. در حقیقت API به اپلیکیشن ها اجازه میدهد با یکدیگر گفتوگو کنند.
بعد از درک کردن مفاهیم REST و API حال نوبت به تعریف RESTful است. RESTful یکی از معروفترین معماریهای مورد استفاده در توسعهٔ وب سرویسها است و انعطاف بسیار زیادی را برای توسعه دهندگان به ارمغان آورده است. در حقیقت RESTful را میتوان مفسری برای REST دانست.
در حقیقت REST یک معماری است که امکان طراحی یک وب سرویس را به روش خاصی در اختیار توسعه دهنده قرار می دهد اما RESTful API یک سرویس است که این معماری را پیاده سازی کرده است. وب سرویس هایی که برپایه RESTful API ساخته میشوند، Stateless هستند به این معنی که به جای ذخیرهسازی وضعیت کلاینت در سمت سرور، کلیهٔ دادهها در سمتِ خود کلاینت ذخیره میشوند و در هر درخواستی نیز برای سرور ارسال میشوند.
• کلاینت-سرور (Client-Server): در این معماری کلاینت بهعنوان front-end و سرور بهعنوان back-end شناخته میشود. در این معماری حداقل وابستگی بین کلاینت و سرور وجود دارد، این اصل به توسعه دهنده ها اجازه میدهد تا بدون هیچگونه وابستگی به یکدیگر به توسعه اپلیکیشن بپردازند.
• بدون وضعیت (Stateless): هیچ دادهای نباید در زمان پردازش انتقال درخواست روی سرور ذخیره شود و session باید در سمت کلاینت ذخیره شود. به عبارت دیگر، سرور هرگز نسبت به وضعیت درخواستهای قبلی کلاینت اطلاعی ندارد. یکی از مزیتهای کلیدی Stateless آن است که تغییرات صورتگرفته روی سرور هرگز کلاینت را با مشکل مواجه نمیکنند.
• قابل کش شدن (Cacheable): کلاینت باید قادر باشد که Response را به صورت Cache ذخیره کند.
• یکپارچگی رابط (Uniform Interface): برای دستیابی به Method های مختلف میباید از یک URL منحصربهفرد استفاده کرد به علاوه اینکه در Response میبایست با استفاده از Status code ها اطلاعات شفافی در اختیار کلاینت قرار دهیم.