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://sokanacademy.com |
خواهید دید که محتوای صفحه ی Home Page سکان آکادمی در ترمینال لود میشود. (علاوه بر کامند لاین بودن cURL، از آن میتوان به عنوان یک لایبرری برای اکثر زبانهای برنامهنویسی من جمله PHP نیز استفاده کرد.)
HTTP Verbs
ممکن است این سؤال پیش آید که چگونه میتوان اکشن یا عملکردی برای درخواستی که از طریق پروتکل اچ تی تی پی ارسال میکنیم تعریف کنیم؟ در پاسخ به این سؤال باید گفت که در اینجا باید با مفهومی تحت عنوان HTTP Verbs آشنا شد که نام دیگر آن HTTP Methods می باشد. هر درخواست از جنس اچ تی تی پی، حاوی متدی می باشدکه در بخش هدر قرار میگیرد. به عنوان مثال:
۱ |
GET / HTTP/۱.۱ |
این دستور حاکی از آن است که متد GET برای فراخوانی اطلاعات مورد استفاده قرار گرفته است. به عبارت دیگر، متدهای Http به سرور دستور میدهند که با دیتایی که از طریق یو آر آل برای سرور ارسال میکنید چه کاری انجام دهند؛ مثلاً آیا رکورد خاصی را حذف کنند یا آن را آپدیت کنند و …
برای بهکارگیری از RESTful API، چهار متد وجود دارد. عبارتند از:
– GET: برای دریافت یک آبجت
– POST: برای ساخت و ارسال یک آبجکت
– PUT: برای تغییر و جایگزین کردن یک آبجکت
– DELETE: برای حذف یک آبجکت
که در اینجا منظور از آبجکت، یک درخواست یا کوئری به سرور است. اکثر ای پی آی های تحت وب که اطلاعاتی را به صورت رایگان در اختیار توسعهدهندگان قرار میدهند معمولاً فقط و فقط امکان استفاده از متد GET را به توسعهدهنده میدهند تا دیتای خاصی را از سرور ارائه دهنده ای پی آی مد نظر دریافت کنند چرا که این متد اصلا تهدیدی برای سرویس ارائه دهنده ی API محسوب نمیگردد زیرا توسعهدهنده فقط میتواند اصطلاحا Read کند و اجازه ی Write کردن روی دیتابیس را ندارد.
بعضی از وب اپلیکیشنهایی هم که امکان استفاده از سایر متدها همچون PUT و DELETE را به توسعهدهندگان می دهند، پیش از عملی ساختن هر گونه درخواستی از طرف توسعهدهنده ، اقدام به تصدیق اطلاعات توسعهدهنده (Authentication) میکنند که چنین قابلیتی نیاز به ثبتنام در سرویس مد نظر، گرفتن یک شناسه ی اختصاصی و … دارد.
متد GET سادهترین و پرکاربردترین متد استفاده شده در پروتکل Http می باشد. به طور کلی، هر وقت که شما روی لینکی در سکان آکادمی کلیک میکنید، این متد از طریق هدر پروتکل اچ تی تی پی برای سرور این سایت ارسال میشود. این متد به سرور دستور میدهد تا اطلاعات مرتبط با آدرس لینکی که روی آن کلیک شده است را برای مرورگر شما ارسال کند.
پیش از این گفته شد که پروتکل اچ تی تی پی دارای دو بخش heaser و body می باشد ؛ هدر حاوی متادیتاها است که صرفاً میتواند حاوی Plain Text یا «متن خالی» باشد که با فرمت خاصی نوشته میشوند اما بادی این پروتکل میتواند حاوی دیتایی با هر فرمتی باشد. از متن خالی گرفته تا تصاویر، کدهای اچ تی ام ال، اکس ام ال، جسون و غیره.
زمانی که مرورگر درخواستی را برای سرور ارسال میکند، اگر همه چیز به درستی اتفاق بیافتد، سرور پاسخی را برای مرورگر (کلاینت) ارسال میکند. حال برای اینکه این پاسخ قابل درک برای مرورگر باشد، باید در بخش هدر پاسخ سرور، Content Type یا «نوع محتوا» بادی مشخص شود که این کار در هدر پاسخ صورت میگیرد:
۱ |
Content-Type: text/html |
در مثال بالا ، پاسخ ارسال شده از سمت سرور در قالب فایل Html ارسال شده است.
با پلاتین همراه باشید.