آشنایی با مفهوم RESTful API


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

REST مخفف واژگان Representational State Transfer است که از سال ۲۰۰۵ در وب شناخته شد که در ظاهر کمی گیج‌کننده به نظر می رسد، اما با کمی توضیح، می‌توان این مفهوم در ظاهر پیچیده را رمزگشایی کرد!

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

در مقابل REST، پروتکل SOAP که مخفف واژگان Simple Object Access Protocol است قرار دارد که از طریق آن می‌توان به رد و بدل دیتا از طریق شبکه در قالب وب سرویس های مختلفی با فرمت XML پرداخت.

API هم مخفف واژگان Application Programming Interface است که دربرگیرنده ی متدهایی برای ارتباط با سایر لایبرری ها یا اپلیکیشن ها است. 

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

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

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

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

HTTP چیست؟
پیش از نگاهی عمیق‌تر به رستفول ای پی آی، باید با مفهوم اچ تی تی پی آشنا شویم. به طور کلی، HTTP به پروتکلی اشاره دارد که از آن طریق می‌توان در بستر وب به نقل و انتقال دیتا پرداخت. در اینجا منظور از پروتکل هم یکسری اصول و قواعدی است که مشخص می‌سازند چه پیام‌هایی قابل انتقال هستند و کدام یک از آن‌ها باید در پاسخ به دیگری ارسال شوند. برای اجرایی شدن پروتکل اچ تی تی پی، نیاز به یک کلاینت و یک سرور داریم؛ معمولاً منظور از کلاینت، مرورگری است که با استفاده از آن وبگردی می‌کنید که این مرورگر معمولاً آغاز کننده ی ارتباط از طریق این پروتکل است.

پیام‌هایی از جنس اچ تی تی پی حاوی دو بخش هستند که یکی Body نام دارد و دیگری Header. دیتایی که شما قصد دارید از طریق مرورگر خود برای سرور ارسال کنید -مثلا نام کاربری و رمزعبور که وارد فرم لاگین می کنید- در بخش Body قرار می گیرند. Header هم دربرگیرنده ی یکسری متادیتا مثل Encoding، متدهای اچ تی تی پی و غیره است که این متادیتا ها مشخص کننده ی این مسأله هستند که دیتای قرار گرفته در Body به شکل می بایست هندل شود.

در صورتی که از گوگل کروم استفاده می کنید، با فشردن هم‌زمان کلیدهای Ctrl + Shift + J می‌توانید پنجره ی Chrom Developer Tools را باز کرده وارد تب Network شوید و همان‌طور که به گشت زنی در وب می پردازید، می‌توانید جزئیات هدر و بادی پروتکل HTTP را رصد کنید. در صورتی هم که از مرورگر فایرفاکس استفاده می کنید، با نصب افزونه ی Firebug می‌توانید به چنین قابلیتی دست یابید.

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

curl -v https://www.sokanacademy.com

و خواهید دید که محتوای صفحه ی هوم پیج سکان آکادمی در ترمینال لود می‌شود (علاوه بر کامند لاین بودن cURL، از آن می‌توان به عنوان یک لایبرری برای اکثر زبان‌های برنامه نویسی من جمله PHP نیز استفاده کرد.)

HTTP Verbs
حال ممکن است این سؤال پیش بیاید که چگونه می‌توان اکشن یا عملکردی برای درخواستی که از طریق پروتکل اچ تی تی پی ارسال می‌کنیم تعریف نماییم؟ در پاسخ به این سؤال باید گفت که در اینجا باید با مفهومی تحت عنوان HTTP Verbs آشنا شویم که نام دیگرش HTTP Methods است که پیش از این به طور مفصل در مورد آن ها صحبت کرده ایم. هر درخواست از جنس اچ تی تی پی، حاوی متدی است که در بخش هدر قرار می گیرد. به طور مثال:

GET / HTTP/1.1

این دستور حاکی از آن است که متد GET که پیش از این با آن آشنا شدیم برای فراخوانی اطلاعات مورد استفاده قرار گرفته است. به عبارت دیگر، متدهای اچ تی تی پی به سرور دستور می‌دهند که با دیتایی که از طریق یو آر آل برای سرور ارسال می‌کنید چه کاری انجام دهند؛ مثلاً آیا رکورد خاصی را حذف کنند یا آن را آپدیت کنند و …
برای به کارگیری از RESTful API، چهار متد پیش رو داریم که عبارتند از:
- GET: برای دریافت یک آبجت
- POST: برای ساخت و ارسال یک آبجکت
- PUT: برای تغییر و جایگزین کردن یک آبجکت
- DELETE: برای حذف یک آبجکت

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

برخی از وب اپلیکیشن هایی هم که امکان استفاده از سایر متدها همچون PUT و DELETE را به توسعه دهندگان می دهند، پیش از عملی ساختن هر گونه درخواستی از طرف توسعه دهنده، اقدام به تصدیق اطلاعات توسعه‌دهنده (Authentication) می‌کنند که چنین قابلیتی نیاز به ثبت نام در سرویس مد نظر، گرفتن یک شناسه ی اختصاصی و … دارد.

متد GET ساده‌ترین و پرکاربردترین متد استفاده شده در پروتکل اچ تی تی پی است. به طور کلی، هر وقت که شما روی لینکی در سکان آکادمی کلیک می کنید، این متد از طریق هدر پروتکل اچ تی تی پی برای سرور این سایت ارسال می شود. این متد به سرور دستور می‌دهد تا اطلاعات مرتبط با آدرس لینکی که روی آن کلیک شده است را برای مرورگر شما ارسال کند.

پیش از این گفتیم که پروتکل اچ تی تی پی دارای دو بخش هدر و بادی است؛ هدر حاوی متادیتاها است که صرفاً می‌تواند حاوی Plain Text یا «متن خالی» باشد که با فرمت خاصی نوشته می‌شوند اما بادی این پروتکل می‌تواند حاوی دیتایی با هر فرمتی باشد. از متن خالی گرفته تا تصاویر، کدهای اچ تی ام ال، اکس ام ال، جسون و غیره.

زمانی که مرورگر درخواستی را برای سرور ارسال می کند، اگر همه چیز به درستی اتفاق بیافتد، سرور پاسخی را برای مرورگر (کلاینت) ارسال می کند. حال برای اینکه این پاسخ قابل درک برای مرورگر باشد، باید در بخش هدر پاسخ سرور، Content Type یا «نوع محتوا» بادی مشخص شود که این کار در هدر پاسخ صورت می گیرد:

Content-Type: text/html

در مثال فوق، پاسخ ارسال شده از سمت سرور در قالب فایل اچ تی ام ال ارسال شده است.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
۱۳۹۶/۰۴/۰۷
اقا من یه سوالی دارم کمی گیج شدم این rest ما به صورت مستقیم استفاده نمیکنیم یعنی منظورم اینه وقتی من در java از کلاس urlconnection استفاده میکنم دارم به نوعی از وب سویس rest استفاده میکنم ;ایا این حرف ها درست است؟؟
کاربر میهمان
کاربر میهمان
۱۳۹۶/۰۲/۱۳
مفید بود
ممنون
کاربر میهمان
کاربر میهمان
۱۳۹۵/۱۱/۰۸
خط اول مهم از همه ، «تر» کم دارد. بهتر است مهم«تر» از همه نوشته شود . با تشکر از زحمات شما بهزاد مرادی عزیز
کاربر میهمان
کاربر میهمان
۱۳۹۵/۰۷/۱۵
مرسی لذت بردم
کاربر میهمان
کاربر میهمان
۱۳۹۵/۰۴/۲۶
با تشکر از زحمات اساتید گرانقدر.
قابل توجه علاقه مندان برنامه نویسی به زبان ++C در محیط Visual Studio.
code-tutorials.mihanblog.com