امروزه عصر یکپارچه سازی است که در آن تبادل داده بین دو یا چند سیستم بیش از هر زمان دیگری مهم شده است.به عنوان مثال، Uber یا اسنپ به دسترسی به موقعیت مکانی از طریق Google Maps یا نشان و دسترسی پرداخت از طریق PayPal یا درگاه پرداخت نیاز دارد. و چیزی که به عنوان واسطه بین دو برنامه عمل می کند و به آنها کمک می کند تا با یکدیگر ارتباط برقرار کنند، یک API یا رابط برنامه کاربردی است.
اگرچه شما چندین رویکرد برای ایجاد API دارید، دو روش خاص وجود دارد که باید برای تسهیل تعامل نرم افزاری در پروژه خود بدانید: REST API و RESTful API است. در این مقاله ما بیشتر به جزئیات API های RESTful، نحوه استفاده از آنها و موارد دیگر خواهیم پرداخت!
RESTful API چیست؟
RESTful API رابطی است که دو سیستم کامپیوتری از آن برای تبادل امن اطلاعات از طریق اینترنت استفاده می کنند. اکثر برنامه های کاربردی تجاری برای انجام وظایف مختلف باید با سایر برنامه های داخلی و شخص ثالث ارتباط برقرار کنند. برای مثال، برای تولید فیشهای حقوق ماهانه، سیستم حسابهای داخلی شما باید دادهها را با سیستم بانکی کلاینت شما به اشتراک بگذارد تا صورتحساب خودکار انجام شود و با یک برنامه زمانی داخلی ارتباط برقرار کند. API های RESTful از این تبادل اطلاعات پشتیبانی می کنند زیرا از استانداردهای ارتباطی نرم افزاری امن، قابل اعتماد و کارآمد پیروی می کنند.
API چیست؟
یک رابط برنامه نویسی کاربردی (API) قوانینی را که باید برای برقراری ارتباط با سایر سیستم های نرم افزاری رعایت کنید، تعریف می کند. توسعه دهندگان API ها را در معرض دید قرار می دهند یا ایجاد می کنند تا سایر برنامه ها بتوانند به صورت برنامه نویسی با برنامه های خود ارتباط برقرار کنند. به عنوان مثال، برنامه timesheet یک API را نشان می دهد که نام کامل کارمند و محدوده ای از تاریخ ها را می خواهد. هنگامی که این اطلاعات را دریافت می کند، برگه زمانی کارمند را به صورت داخلی پردازش می کند و تعداد ساعات کار در آن محدوده تاریخ را برمی گرداند.
شما می توانید یک وب API را به عنوان دروازه ای بین کلاینت و منابع موجود در وب در نظر بگیرید.
کلاینت
کلاینت کاربرانی هستند که می خواهند از طریق وب به اطلاعات دسترسی داشته باشند. کلاینت می تواند یک شخص یا یک سیستم نرم افزاری باشد که از API استفاده می کند. به عنوان مثال، توسعه دهندگان می توانند برنامه هایی بنویسند که به داده های آب و هوا از یک سیستم آب و هوا دسترسی دارند. یا زمانی که مستقیماً از وب سایت هواشناسی بازدید می کنید، می توانید به همان داده ها از مرورگر خود دسترسی پیدا کنید.
منابع
منابع اطلاعاتی هستند که برنامه های کاربردی مختلف در اختیار کلاینت خود قرار می دهند. منابع می توانند تصاویر، ویدئوها، متن، اعداد یا هر نوع داده باشند. ماشینی که منبع را به کلاینت می دهد سرور نیز نامیده می شود. سازمانها از APIها برای به اشتراک گذاشتن منابع و ارائه خدمات وب با حفظ امنیت، کنترل و احراز هویت استفاده میکنند. علاوه بر این، APIها به آنها کمک میکنند تا تعیین کنند کدام کلاینت به منابع داخلی خاص دسترسی دارند.
طراحی REST API چیست؟
REST (Representational State Transfer) یک سبک معماری برای طراحی API است که بر استفاده از روشهای استاندارد HTTP برای دسترسی به منابع از طریق URL ها متکی است. برخی از اصول کلیدی طراحی REST API عبارتند از:
منابع با نشانیهای اینترنتی شناسایی میشوند و به کلاینت این امکان را میدهند تا با استفاده از درخواستهای HTTP GET، POST، PUT، DELETE آنها را به راحتی پیدا و تغییر دهند. منابع می توانند اسناد، تصاویر یا هر شیء مدیریت شده توسط سرویس باشند.
پاسخ منابع منتقل می شود، معمولاً JSON یا XML است. ریسپانس حاوی داده هایی در مورد وضعیت منبع در نقطه ای که درخواست می شود می باشد.
ارتباط بدون تبعیت - هیچ زمینه کلاینت بین درخواست ها روی سرور ذخیره نمی شود. هر درخواست دارای تمام اطلاعات لازم برای پردازش آن بدون اتکا به مبادلات قبلی است. این مقیاس پذیری و انعطاف پذیری را بهبود می بخشد.
روش های استاندارد HTTP برای دستکاری منابع (GET، POST، PUT، DELETE) به روشی از پیش تعریف شده استفاده می شود و پیاده سازی را آسان می کند.
پیام های خطای خود توصیفی به کلاینت این امکان را می دهد تا بدون نیاز به اطلاعات خارج از باند، مسائل را خودشان حل کنند.
REST چیست؟
Representational State Transfer (REST) یک معماری نرم افزاری است که شرایطی را بر نحوه عملکرد یک API تحمیل می کند. REST در ابتدا به عنوان یک دستورالعمل برای مدیریت ارتباطات در یک شبکه پیچیده مانند اینترنت ایجاد شد. می توانید از معماری مبتنی بر REST برای پشتیبانی از ارتباطات با کارایی بالا و قابل اعتماد در مقیاس استفاده کنید. شما به راحتی می توانید آن را پیاده سازی و اصلاح کنید، و قابلیت مشاهده و قابلیت حمل بین پلتفرم را برای هر سیستم API به ارمغان بیاورید.
توسعه دهندگان API می توانند API ها را با استفاده از چندین معماری مختلف طراحی کنند. APIهایی که از سبک معماری REST پیروی می کنند، REST API نامیده می شوند. وب سرویس هایی که معماری REST را پیاده سازی می کنند، وب سرویس های RESTful نامیده می شوند. اصطلاح RESTful API به طور کلی به API های وب RESTful اشاره دارد. در آخر این مقاله نیز به تفاوت های بین REST و RESTful خواهیم پرداخت.
در زیر برخی از اصول سبک معماری REST آمده است:
رابط یکنواخت
رابط یکنواخت برای طراحی هر وب سرویس RESTful اساسی است. این نشان می دهد که سرور اطلاعات را در قالب استاندارد منتقل می کند. منبع فرمت شده یک ریسپانس در REST نامیده می شود. این قالب می تواند با ریسپانس داخلی منبع در برنامه سرور متفاوت باشد. برای مثال، سرور میتواند دادهها را به صورت متن ذخیره کند اما آنها را در قالب نمایش HTML ارسال کند.
رابط یکنواخت چهار محدودیت معماری را تحمیل می کند:
درخواست ها باید منابع را شناسایی کنند. آنها این کار را با استفاده از یک شناسه منبع یکسان انجام می دهند.
کلاینت اطلاعات کافی در ریسپانس منبع دارند تا در صورت تمایل، منبع را اصلاح یا حذف کنند. سرور با ارسال فراداده ای که منبع را بیشتر توصیف می کند، این شرایط را برآورده می کند.
کلاینت اطلاعاتی در مورد نحوه پردازش بیشتر نمایندگی دریافت می کنند. سرور با ارسال پیام های خود توصیفی که حاوی فراداده در مورد اینکه چگونه کلاینت می تواند بهترین استفاده از آنها را داشته باشد به این امر دست می یابد.
کلاینت اطلاعاتی در مورد سایر منابع مرتبطی که برای تکمیل یک کار به آنها نیاز دارند، دریافت می کنند. سرور با ارسال لینکهایی در نمایش به این امر دست مییابد تا کلاینت بتوانند به صورت پویا منابع بیشتری را کشف کنند.
بی تابعیتی
در معماری REST، حالت بدون وضعیت به یک روش ارتباطی اشاره دارد که در آن سرور هر درخواست کلاینت را مستقل از تمام درخواستهای قبلی تکمیل میکند. کلاینت می توانند منابع را به هر ترتیبی درخواست کنند و هر درخواستی بدون ریسپانس یا جدا از سایر درخواست ها است. این محدودیت طراحی REST API نشان میدهد که سرور میتواند هر بار درخواست را کاملاً درک کرده و انجام دهد.
سیستم لایه ای
در معماری سیستم لایهای، کلاینت میتواند به سایر واسطههای مجاز بین کلاینت و سرور متصل شود و همچنان پاسخهایی را از سرور دریافت میکند. سرورها همچنین می توانند درخواست ها را به سرورهای دیگر ارسال کنند. شما می توانید وب سرویس RESTful خود را طوری طراحی کنید که روی چندین سرور با لایه های متعدد مانند امنیت، برنامه کاربردی و منطق تجاری اجرا شود و با هم کار کنند تا درخواست های کلاینت را برآورده کنند. این لایه ها برای کلاینت نامرئی می مانند.
قابلیت ذخیره سازی در حافظه پنهان
سرویسهای وب RESTful از حافظه پنهان پشتیبانی میکنند، که فرآیند ذخیره برخی از پاسخها بر روی کلاینت یا یک واسطه برای بهبود زمان پاسخ سرور است. به عنوان مثال، فرض کنید از وب سایتی بازدید می کنید که در هر صفحه دارای تصاویر مشترک هدر و فوتر است. هر بار که از یک صفحه وب سایت جدید بازدید می کنید، سرور باید همان تصاویر را دوباره ارسال کند. برای جلوگیری از این امر، کلاینت این تصاویر را پس از اولین پاسخ ذخیره می کند و سپس از تصاویر مستقیماً از کش استفاده می کند. خدمات وب RESTful با استفاده از پاسخهای API که خود را بهعنوان cacheable یا noncacheable تعریف میکنند، کش را کنترل میکنند.
کد در صورت تقاضا
در سبک معماری REST، سرورها می توانند با انتقال کد برنامه نویسی نرم افزار به کلاینت، به طور موقت عملکرد کلاینت را گسترش دهند یا سفارشی کنند. به عنوان مثال، هنگامی که یک فرم ثبت نام را در هر وب سایتی پر می کنید، مرورگر شما بلافاصله هر اشتباهی را که مرتکب می شوید، مانند شماره تلفن های نادرست، برجسته می کند. به دلیل کد ارسال شده توسط سرور می تواند این کار را انجام دهد.
یک API RESTful چه تفاوتی با سایر APIها دارد؟
سبک معماری - REST یک سبک معماری با محدودیتهایی در مورد داشتن یک رابط یکنواخت، بدون حالت، استفاده از منابع و نمایشها، و غیره است. سایر رویکردهای API مانند RPC یا SOAP بدون سبک تعریفشده، آزادتر هستند.
HTTP به عنوان رابط - REST از بلوک های ساختمان معماری وب مانند روش های HTTP، URI ها، هدرها، بدنه و کدهای وضعیت به عنوان رابط برای دسترسی به منابع استفاده می کند. APIهای RPC تعداد زیادی از روشهای سفارشی را به نمایش میگذارند که بیشتر برای داخلی برنامهها طراحی شدهاند.
منابع به عنوان اسم - در REST، هر موجودیتی که در معرض نمایش قرار میگیرد به عنوان منبعی مدلسازی میشود که توسط URI نشان داده میشود. منابع نشان دهنده اسم ها و مجموعه ای از اسم ها هستند. در RPC، تماس ها بیشتر بر افشای افعال یا توابع به طور مستقیم برای دستکاری داده ها تمرکز می کنند.
بدون وضعیت - REST هر درخواست را بدون مدیریت وضعیت نشست بین پیامها مستقل میداند. این مقیاس پذیری و انعطاف پذیری را بهبود می بخشد. پروتکلهای RPC وضعیت را در چندین درخواست دنبال میکنند، نه بهاندازه افقی مقیاسپذیر.
پشتیبانی از حافظه پنهان - مکانیسم های داخلی ذخیره سازی HTTP را می توان برای بهبود عملکرد REST اعمال کرد زیرا درخواست ها مستقل هستند. پروتکل های RPC سفارشی برای بهینه سازی نیاز به کش اختصاصی دارند.
پیامهای خود توصیفی - REST از کدهای وضعیت، انواع MIME و هدر ها استفاده میکند، بنابراین پاسخها حاوی ابردادههایی هستند که قالب، خطاها و غیره را توصیف میکنند. پروتکلهای RPC این ابرداده را در آرگومانهای پیام جاسازی میکنند که نیاز به تجزیه سفارشی دارند.
به طور خلاصه، REST محدودیتهای معماری را اعمال میکند که فناوریهای وب کلیدی را در بر میگیرد و از آن استفاده میکند تا تعاملات کلاینت-سرور توزیع شده را در مقیاس ساده کند، در حالی که RPC کمتر بر روی یک سبک یکنواخت و بیشتر بر افشای داخلی برنامه تمرکز میکند.
برخی از برنامه های کاربردی دنیای واقعی RESTful API ها چیست؟
API های RESTful معمولاً در برنامه های کاربردی وب و تلفن همراه برای بازیابی یا اصلاح منابع و داده ها در سیستم های راه دور استفاده می شوند. برخی از نمونه ها عبارتند از:
سایتهای رسانههای اجتماعی مانند توییتر، فیسبوک از REST API برای ادغام با برنامههای شخص ثالث و امکان ارسال بهروزرسانیها استفاده میکنند.
برنامههای اشتراکگذاری سواری مانند Uber و Lyft از REST API برای هماهنگ کردن خودروها، بهدست آوردن نقشهها، کرایهها و دادههای مکان استفاده میکنند.
پخش ویدئو، پخش موسیقی از طریق Netflix، Spotify از REST API برای دریافت اطلاعات فایل های رسانه ای از سرورها استفاده می کند.
برنامه های بانکی از REST API برای بازیابی اطلاعات حساب شما و شروع تراکنش با سرورهای راه دور استفاده می کنند.
برنامههای اینترنت اشیا با حسگرها و دستگاهها از طریق REST API برای نظارت بر آنها و ارسال دستورات ارتباط برقرار میکنند.
به طور کلی، REST به دلیل سادگی و مقیاس پذیری، برنامه های کاربردی مدرن را با خدمات وب ادغام می کند.
API های RESTful چگونه کار می کنند؟
اصول RESTful- RESTful APIهای به محدودیتهای مربوط به داشتن یک رابط یکنواخت، بدون ریسپانس، نمایاندن URIهای ساختار دایرکتوری مانند و انتقال XML، JSON یا سایر ریسپانس های منابع پایبند هستند.
شناسایی منبع - هر موجودیتی که در API قابل دستکاری یا دسترسی است به عنوان یک منبع HTTP که در یک نقطه پایانی URI در معرض دید قرار می گیرد، نشان داده می شود. URI ها مجموعه ها، عناصر، ویژگی ها و غیره را شناسایی می کنند.
متد های HTTP - از روشهای استاندارد HTTP برای تعریف تعامل با منابع استفاده میکند. GET بازیابی ها را بازیابی می کند، POST منابع ایجاد می کند، PUT آنها را به روز می کند، DELETE آنها را حذف می کند.
درخواست پیام - کلاینت درخواستها را به نقاط پایانی REST API ارسال میکنند با سرصفحههای HTTP حاوی ابردادههایی مانند نشانههای مجوز، نوع محتوا، پذیرش هدر ها و غیره. پارامترها به فیلتر مجموعههای نتیجه یا پیوند دادهها کمک میکنند.
پیامهای پاسخ - سرورها کدهای پاسخ HTTP را که نتایج را به همراه سرصفحههای پاسخ که محتوا را توصیف میکنند، برمیگردانند. بدنه پیام حاوی ریسپانس هایی از منابع یا محموله های داده است.
بدون تابعیت - هر درخواست RESTful بدون تابعیت و بدون اتکا به زمینه سرور یا تعاملات قبلی است. جلسات از طریق نشانه ها نگهداری می شوند.
پشتیبانی از حافظه پنهان - API های REST عملکرد را با ذخیره سازی منابع تکراری در سرور یا کلاینت بهبود می بخشند، زیرا HTTP قابل ذخیره سازی است.
خود مستندسازی - APIهای REST از قراردادهای HTTP برای کدهای پاسخ، افعال و انواع رسانه استفاده میکنند، بنابراین APIها خود مستندسازی میکنند که چگونه قرار است توسط کلاینتها استفاده شوند.
مزایای RESTful API چیست؟
API های RESTful دارای مزایای زیر هستند:
مقیاس پذیری
سیستمهایی که APIهای REST را پیادهسازی میکنند، میتوانند به طور موثر مقیاس شوند، زیرا REST تعاملات کلاینت و سرور را بهینه میکند. بی تابعیتی بار سرور را حذف می کند زیرا سرور مجبور نیست اطلاعات درخواست کلاینت قبلی را حفظ کند. حافظه پنهان با مدیریت خوب تا حدی یا به طور کامل برخی از تعاملات کلاینت و سرور را حذف می کند. همه این ویژگیها از مقیاسپذیری پشتیبانی میکنند بدون اینکه گلوگاههای ارتباطی ایجاد کنند که عملکرد را کاهش میدهد.
انعطاف پذیری
خدمات وب RESTful از جداسازی کلی کلاینت و سرور پشتیبانی می کند. آنها اجزای مختلف سرور را ساده و جدا می کنند تا هر قسمت بتواند به طور مستقل تکامل یابد. تغییرات پلتفرم یا فناوری در برنامه سرور بر برنامه کلاینت تأثیر نمی گذارد. توانایی لایهبندی توابع کاربردی، انعطافپذیری را حتی بیشتر افزایش میدهد. به عنوان مثال، توسعه دهندگان می توانند بدون بازنویسی منطق برنامه، تغییراتی در لایه پایگاه داده ایجاد کنند.
استقلال
API های REST مستقل از فناوری مورد استفاده هستند. میتوانید برنامههای کلاینت و سرور را به زبانهای برنامهنویسی مختلف بدون تأثیر بر طراحی API بنویسید. همچنین میتوانید فناوری زیربنایی را در هر دو طرف تغییر دهید بدون اینکه تأثیری بر ارتباطات داشته باشید.
REST در مقابل SOAP
REST و پروتکل دسترسی به شیء ساده (SOAP) روش های مختلفی را برای فراخوانی یک وب سرویس ارائه می دهند. REST یک سبک معماری است، در حالی که SOAP یک مشخصات پروتکل ارتباطی استاندارد را برای تبادل پیام مبتنی بر XML تعریف می کند. برنامه های REST می توانند از SOAP استفاده کنند.
خدمات وب RESTful بدون تابعیت هستند. پیادهسازی مبتنی بر REST در مقایسه با SOAP ساده است، اما کاربران باید زمینه و محتوای ارسالی را درک کنند، زیرا هیچ مجموعه استانداردی از قوانین برای توصیف رابط خدمات وب REST وجود ندارد. سرویسهای REST برای دستگاههای نمایه محدود، مانند موبایل، مفید هستند و به راحتی با وبسایتهای موجود ادغام میشوند.
SOAP به کد کمتری نیاز دارد - به معنای کد زیرساختی سطح پایین که ماژول های کد اصلی را به هم متصل می کند - نسبت به طراحی خدمات REST. زبان توصیف خدمات وب مجموعه ای از قوانین مشترک را برای تعریف پیام ها، اتصالات، عملیات و مکان سرویس توصیف می کند. خدمات وب SOAP برای پردازش و فراخوانی ناهمزمان مفید هستند.
نتیجه
API های RESTful روشی آسان و در عین حال قدرتمند برای ایجاد رابط های خدمات وب مقیاس پذیر ارائه می دهند. REST با محدود کردن معماری حول منابع مرکزی که با استفاده از روشهای استاندارد HTTP قابل دسترسی هستند، توسعه برنامههای کاربردی متصل را برای برنامهنویسی موبایل و وب آسان میکند. ابزار قوی همراه با مقیاس پذیری طراحی جامع RESTful را ایجاد می کند