REST API چیست؟
در مقالههای قبلی با مفاهیم API، پروتکل HTTP و قالب JSON آشنا شدیم.
دیدیم که API راهی برای ارتباط بین نرمافزارها است، HTTP قوانین این ارتباط را مشخص میکند و JSON یکی از رایجترین قالبهای انتقال داده محسوب میشود.
اما هنوز یک سؤال مهم باقی مانده است:
یک API باید چگونه طراحی شود تا استفاده از آن ساده، قابلدرک و استاندارد باشد؟
یکی از محبوبترین پاسخها به این سؤال، REST API است.
REST API روشی برای طراحی APIها است که از اصول مشخصی پیروی میکند و باعث میشود ارتباط بین نرمافزارها سادهتر، منظمتر و قابل پیشبینیتر باشد.
REST چیست؟
REST مخفف Representational State Transfer است.
REST یک پروتکل یا زبان برنامهنویسی نیست؛ بلکه یک سبک معماری (Architectural Style) برای طراحی APIها است.
به بیان ساده، REST مجموعهای از اصول و قواعد را معرفی میکند که اگر هنگام طراحی API آنها را رعایت کنیم، API ما استانداردتر و استفاده از آن برای سایر توسعهدهندگان آسانتر خواهد بود.
چرا REST به وجود آمد؟
در سالهای اولیه توسعه وب، هر شرکت APIهای خود را با روش و ساختار متفاوتی طراحی میکرد.
در نتیجه، توسعهدهندگان برای کار با هر API باید قوانین و الگوهای جدیدی را یاد میگرفتند.
REST با ارائه مجموعهای از اصول مشترک، این مشکل را تا حد زیادی برطرف کرد.
به همین دلیل، امروزه بخش بزرگی از APIهای عمومی و خصوصی بر اساس معماری REST طراحی میشوند.
یک مثال ساده
فرض کنید وارد یک کتابخانه میشوید.
اگر هر کتابخانه روش متفاوتی برای شمارهگذاری کتابها، ثبت امانت و جستجوی کتاب داشته باشد، هر بار باید قوانین جدیدی یاد بگیرید.
اما اگر همه کتابخانهها از یک روش استاندارد استفاده کنند، کار کردن با آنها بسیار سادهتر خواهد بود.
REST نیز دقیقاً همین نقش را برای APIها ایفا میکند و مجموعهای از قوانین مشترک را در اختیار توسعهدهندگان قرار میدهد.
REST API چگونه کار میکند؟
REST API معمولاً از همان مفاهیمی استفاده میکند که در مقاله HTTP با آنها آشنا شدیم.
کلاینت یک Request برای سرور ارسال میکند.
سرور درخواست را پردازش میکند و در صورت موفق بودن عملیات، اطلاعات موردنیاز را که معمولاً در قالب JSON هستند، داخل Response برمیگرداند.
در نتیجه، ارتباط میان کلاینت و سرور ساده، استاندارد و قابل پیشبینی خواهد بود.
Resource چیست؟
یکی از مهمترین مفاهیم REST، Resource یا «منبع» است.
هر چیزی که بتوان درباره آن اطلاعات دریافت یا روی آن عملیاتی انجام داد، یک Resource محسوب میشود.
برای مثال، در یک فروشگاه اینترنتی موارد زیر هر کدام یک Resource هستند:
- محصولات
- کاربران
- سفارشها
- دستهبندیها
- نظرات کاربران
در یک سامانه آموزشی نیز دورهها، دانشجویان، مدرسها و درسها میتوانند Resource باشند.
Endpoint چیست؟
برای دسترسی به هر Resource معمولاً یک آدرس مشخص وجود دارد که به آن Endpoint گفته میشود.
Endpoint همان آدرسی است که کلاینت Request خود را به آن ارسال میکند.
برای مثال، اگر یک API اطلاعات محصولات را ارائه دهد، معمولاً Endpoint مخصوص محصولات با Endpoint مربوط به کاربران متفاوت خواهد بود.
هر Endpoint مسئول مدیریت یک Resource یا گروهی از Resourceها است.
REST API چه ارتباطی با HTTP دارد؟
REST بهتنهایی مسئول انتقال اطلاعات نیست.
در بیشتر پروژههای امروزی، REST API برای برقراری ارتباط از پروتکل HTTP استفاده میکند.
به همین دلیل، متدهای HTTP مانند GET، POST، PUT، PATCH و DELETE نقش مهمی در APIهای REST دارند و هر کدام برای انجام نوع خاصی از عملیات استفاده میشوند.
REST API چه ارتباطی با JSON دارد؟
در مقاله قبل دیدیم که JSON قالبی برای نمایش و انتقال دادهها است.
بیشتر REST APIها اطلاعات خود را در قالب JSON ارسال و دریافت میکنند، زیرا این قالب ساده، سبک و توسط تقریباً تمام زبانهای برنامهنویسی پشتیبانی میشود.
البته REST استفاده از JSON را اجباری نمیکند و از نظر تئوری میتوان از قالبهای دیگری نیز استفاده کرد، اما در عمل JSON به رایجترین انتخاب تبدیل شده است.
چرا REST API اینقدر محبوب است؟
سادگی، استاندارد بودن و سازگاری با HTTP باعث شده REST API به یکی از پرکاربردترین روشهای طراحی API تبدیل شود.
امروزه بسیاری از اپلیکیشنهای موبایل، وبسایتها، فروشگاههای اینترنتی، سامانههای بانکی و سرویسهای ابری از REST API برای ارتباط بین بخشهای مختلف سیستم استفاده میکنند.
در بخش بعدی مقاله با اصول اصلی REST، مفهوم Stateless، عملیات CRUD، استفاده از متدهای HTTP و ویژگیهایی که یک REST API را استاندارد میکنند، آشنا خواهیم شد.
اصول اصلی REST
REST تنها مجموعهای از آدرسها و متدهای HTTP نیست، بلکه بر پایه چند اصل مهم طراحی شده است. رعایت این اصول باعث میشود APIها سادهتر، قابل توسعهتر و قابل استفادهتر باشند.
هرچند در پروژههای مختلف ممکن است برخی جزئیات متفاوت باشند، اما بیشتر REST APIهای استاندارد از این اصول پیروی میکنند.
Stateless بودن
یکی از مهمترین ویژگیهای REST این است که ارتباط بین کلاینت و سرور Stateless است.
Stateless بودن یعنی سرور بهطور پیشفرض اطلاعات درخواستهای قبلی کاربر را نگه نمیدارد.
هر Request باید تمام اطلاعات لازم برای پردازش همان درخواست را همراه خود داشته باشد.
برای مثال، اگر کاربری بخواهد اطلاعات حساب خود را دریافت کند، درخواست او باید شامل اطلاعات لازم برای احراز هویت باشد و سرور نباید به درخواستهای قبلی وابسته باشد.
این ویژگی باعث میشود APIها مقیاسپذیرتر و مدیریت آنها سادهتر شود.
Client و Server از یکدیگر مستقل هستند
در معماری REST، کلاینت و سرور تا حد زیادی مستقل از یکدیگر عمل میکنند.
کلاینت تنها درخواست خود را ارسال میکند و نیازی ندارد بداند سرور چگونه آن را پردازش میکند.
از طرف دیگر، سرور نیز فقط پاسخ مناسب را برمیگرداند و نیازی ندارد بداند درخواست از مرورگر، اپلیکیشن موبایل یا هر نرمافزار دیگری ارسال شده است.
این استقلال باعث میشود بتوان هر بخش از سیستم را بدون ایجاد تغییرات گسترده در بخش دیگر توسعه داد.
استفاده از Resourceها
در REST همهچیز حول Resourceها طراحی میشود.
بهجای اینکه عملیات مختلف آدرسهای کاملاً متفاوتی داشته باشند، معمولاً همه عملیات مربوط به یک Resource روی همان Endpoint انجام میشود و نوع عملیات توسط متد HTTP مشخص میشود.
برای مثال، همه عملیات مربوط به محصولات روی Endpoint محصولات انجام میشود و تفاوت بین دریافت، ایجاد، ویرایش یا حذف محصول از طریق متد HTTP مشخص خواهد شد.
CRUD چیست؟
یکی از مفاهیم مهم در REST، عملیات CRUD است.
CRUD چهار عملیات اصلی روی دادهها را توصیف میکند:
- Create : ایجاد اطلاعات جدید
- Read : دریافت اطلاعات
- Update : ویرایش اطلاعات
- Delete : حذف اطلاعات
تقریباً تمام نرمافزارها این چهار نوع عملیات را روی دادههای خود انجام میدهند.
رابطه CRUD و متدهای HTTP
در REST معمولاً هر عملیات CRUD با یکی از متدهای HTTP انجام میشود.
- GET برای دریافت اطلاعات (Read)
- POST برای ایجاد اطلاعات جدید (Create)
- PUT یا PATCH برای ویرایش اطلاعات (Update)
- DELETE برای حذف اطلاعات (Delete)
به همین دلیل، توسعهدهندگان با مشاهده متد HTTP معمولاً میتوانند حدس بزنند که درخواست چه کاری انجام خواهد داد.
یک مثال واقعی از CRUD
فرض کنید یک API برای مدیریت دورههای آموزشی دارید.
کاربر میتواند:
- فهرست دورهها را مشاهده کند.
- یک دوره جدید ایجاد کند.
- اطلاعات یک دوره را ویرایش کند.
- یک دوره را حذف کند.
این چهار عملیات نمونهای از CRUD هستند و تقریباً در تمام سامانههای مدیریتی دیده میشوند.
Endpointها باید قابل پیشبینی باشند
یکی از ویژگیهای REST این است که آدرسهای API تا حد امکان ساده و قابل فهم طراحی شوند.
برای مثال، اگر Endpoint مربوط به کاربران مشخص باشد، توسعهدهنده باید بتواند بهراحتی Endpoint مربوط به یک کاربر خاص یا لیست کاربران را حدس بزند.
این موضوع باعث میشود استفاده از API برای سایر برنامهنویسان بسیار سادهتر شود.
Responseها باید معنیدار باشند
یک REST API خوب تنها اطلاعات را برنمیگرداند، بلکه نتیجه عملیات را نیز بهوضوح مشخص میکند.
برای مثال، اگر اطلاعات با موفقیت دریافت شوند، سرور باید Status Code مناسب را ارسال کند.
اگر کاربر مجوز دسترسی نداشته باشد یا منبع موردنظر وجود نداشته باشد، Response نیز باید این موضوع را بهدرستی اعلام کند.
به همین دلیل، استفاده صحیح از Status Codeها بخش مهمی از طراحی یک REST API استاندارد است.
آیا REST همیشه از JSON استفاده میکند؟
خیر.
یکی از برداشتهای نادرست این است که REST و JSON یک مفهوم هستند.
REST یک سبک معماری برای طراحی API است، در حالی که JSON قالبی برای نمایش دادهها است.
یک REST API میتواند از قالبهای دیگری نیز استفاده کند، اما امروزه JSON به دلیل سادگی و پشتیبانی گسترده، رایجترین انتخاب است.
REST API در Django
اگر با Django کار کنید، احتمال زیادی دارد که برای توسعه APIها از فریمورک Django REST Framework استفاده کنید.
در چنین پروژههایی، درخواستهای HTTP دریافت میشوند، دادهها پردازش میشوند و معمولاً پاسخها در قالب JSON به کلاینت بازگردانده میشوند.
به همین دلیل، آشنایی با REST یکی از مهارتهای مهم برای توسعهدهندگان Backend محسوب میشود.
در بخش پایانی مقاله، مزایا و محدودیتهای REST API، تفاوت REST و SOAP، اشتباهات رایج و دلیل محبوبیت گسترده REST در توسعه نرمافزار را بررسی خواهیم کرد.
مزایای استفاده از REST API
REST API به دلیل سادگی و انعطافپذیری، به یکی از محبوبترین روشهای طراحی API در جهان تبدیل شده است.
امروزه بسیاری از وبسایتها، اپلیکیشنهای موبایل، فروشگاههای اینترنتی، سرویسهای ابری و حتی سامانههای بانکی از REST API برای ارتباط بین بخشهای مختلف سیستم استفاده میکنند.
از مهمترین مزایای REST API میتوان به موارد زیر اشاره کرد:
- یادگیری و استفاده نسبتاً ساده
- استفاده از استانداردهای شناختهشده مانند HTTP
- استقلال بین کلاینت و سرور
- مقیاسپذیری مناسب برای پروژههای کوچک و بزرگ
- سازگاری با تقریباً تمام زبانهای برنامهنویسی
- پشتیبانی گسترده توسط ابزارها و فریمورکهای مختلف
- امکان استفاده توسط وبسایتها، اپلیکیشنهای موبایل و سایر سرویسها بهصورت همزمان
محدودیتهای REST API
با وجود محبوبیت زیاد، REST همیشه بهترین انتخاب برای همه پروژهها نیست.
برای مثال، اگر کلاینت فقط به بخش کوچکی از اطلاعات نیاز داشته باشد، ممکن است REST دادههای بیشتری از مقدار موردنیاز ارسال کند.
همچنین در برخی پروژههای پیچیده که ارتباطات بلادرنگ یا پرسوجوهای بسیار انعطافپذیر اهمیت دارند، ممکن است معماریهای دیگری انتخاب شوند.
با این حال، برای بخش بزرگی از پروژههای وب، REST همچنان یکی از مناسبترین گزینهها محسوب میشود.
تفاوت REST API و SOAP
پیش از محبوب شدن REST، بسیاری از سرویسهای وب با استفاده از معماری SOAP توسعه داده میشدند.
SOAP معمولاً ساختار پیچیدهتری دارد و قوانین سختگیرانهتری برای تبادل دادهها تعریف میکند.
در مقابل، REST سبکتر، سادهتر و انعطافپذیرتر است و معمولاً از HTTP و JSON استفاده میکند.
به همین دلیل، بیشتر APIهای جدید بر پایه REST طراحی میشوند، هرچند SOAP هنوز در برخی سامانههای سازمانی و قدیمی مورد استفاده قرار میگیرد.
آیا REST API فقط برای وبسایتها استفاده میشود؟
خیر.
هر نرمافزاری که بتواند درخواست HTTP ارسال کند، میتواند از یک REST API استفاده کند.
برای مثال، موارد زیر همگی میتوانند با REST API ارتباط برقرار کنند:
- اپلیکیشنهای اندروید
- اپلیکیشنهای iOS
- وبسایتها
- نرمافزارهای دسکتاپ
- سرویسهای ابری
- دستگاههای اینترنت اشیا (IoT)
همین ویژگی باعث شده REST API به یکی از رایجترین روشهای ارتباط بین نرمافزارها تبدیل شود.
یک مثال واقعی از REST API
فرض کنید یک اپلیکیشن فروشگاهی روی تلفن همراه خود نصب کردهاید.
وقتی صفحه محصولات را باز میکنید، اپلیکیشن مستقیماً به دیتابیس متصل نمیشود.
در عوض، یک Request به REST API فروشگاه ارسال میکند.
REST API درخواست را پردازش میکند، اطلاعات محصولات را از دیتابیس دریافت میکند و آنها را معمولاً در قالب JSON داخل Response به اپلیکیشن بازمیگرداند.
اپلیکیشن نیز این اطلاعات را پردازش کرده و محصولات را به کاربر نمایش میدهد.
تقریباً تمام اپلیکیشنهای مدرن، از شبکههای اجتماعی گرفته تا فروشگاههای اینترنتی، از روشی مشابه برای تبادل اطلاعات استفاده میکنند.
چرا یادگیری REST API برای برنامهنویسان مهم است؟
اگر قصد فعالیت در حوزه Backend، توسعه وب یا برنامهنویسی موبایل را دارید، احتمال زیادی وجود دارد که هر روز با REST API سروکار داشته باشید.
ساخت API، اتصال اپلیکیشن به Backend، ارتباط بین سرویسهای مختلف و حتی بسیاری از سرویسهای هوش مصنوعی بر پایه مفاهیم REST انجام میشوند.
به همین دلیل، درک اصول REST یکی از مهارتهای پایهای برای بیشتر توسعهدهندگان نرمافزار محسوب میشود.
جمعبندی
REST API یکی از رایجترین روشهای طراحی API است که بر پایه مجموعهای از اصول مشخص ساخته شده است. این معماری معمولاً از HTTP برای برقراری ارتباط و از JSON برای تبادل دادهها استفاده میکند.
مفاهیمی مانند Resource، Endpoint، CRUD، متدهای HTTP و Stateless بودن، بخش مهمی از REST را تشکیل میدهند و باعث میشوند APIها ساختاری استاندارد، قابلفهم و قابل توسعه داشته باشند.
اگر قصد توسعه API یا کار با فریمورکهایی مانند Django REST Framework را دارید، یادگیری REST یکی از مهمترین گامهای مسیر شما خواهد بود.
سؤالات متداول
REST API چیست؟
REST API روشی برای طراحی APIها بر اساس اصول معماری REST است که معمولاً از HTTP برای ارتباط و از JSON برای تبادل داده استفاده میکند.
آیا REST یک پروتکل است؟
خیر. REST یک سبک معماری برای طراحی API است و خودِ پروتکل محسوب نمیشود. بیشتر REST APIها از پروتکل HTTP استفاده میکنند.
تفاوت REST و API چیست؟
API یک رابط برای ارتباط بین نرمافزارها است، در حالی که REST مجموعهای از اصول و قواعد برای طراحی این رابطها است. بنابراین، هر API الزاماً REST نیست.
REST API چه ارتباطی با JSON دارد؟
REST استفاده از JSON را الزامی نمیکند، اما امروزه بیشتر REST APIها دادههای خود را در قالب JSON ارسال و دریافت میکنند.
مطالعه بیشتر
قدم بعدی چیست؟
اکنون که با معماری REST API آشنا شدید، قدم بعدی شناخت یکی از مهمترین مفاهیم هر API است. در مقاله بعدی بررسی میکنیم URL چیست، یک URL از چه بخشهایی تشکیل شده و مرورگر چگونه از آن برای پیدا کردن منابع مختلف در وب استفاده میکند.
نظرات
هنوز نظری ثبت نشده؛ اولین نفر باشید.
ثبت نظر
در حال پاسخ به