Application Programming Interfaces یا API ها، راهی برای ارتباط برنامهها یا سرویسهای کامپیوتری با یکدیگر هستند. این ارتباط معمولا در نقطه پایانی API یا API endpoint اتفاق میافتد. در این مقاله به بررسی و مقایسه Rest API و Web API، که دو روش محبوب برای ساخت API هستند، پرداخته خواهد شد:
تصویر(1)
REST API چیست؟
برخلاف تصور رایج، REST API یک پروتکل نیست، بلکه محبوب ترین معماری برای توسعه API ها میباشد. REST به صورت stateless (بی حالت) میباشد، بنابراین هیچ داده یا وضعیتی بین درخواستها ذخیره نمیشود. همچنین REST از معماریهای متعددی برای ساخت برنامههایی که از طریق HTTP ارتباط برقرار میکنند، بهره میبرد:
- Client-server
- Statelessness
- Uniform interface
- Cacheability
- Layered system
- Code on demand
نکته: stateless یا "بی حالت" در محیط شبکه، به قابلیتی اشاره دارد که سرور هیچ حالت یا اطلاعاتی را از درخواستهای ارسالی یک کلاینت ذخیره نمیکند و به هر درخواست کاملا مستقل و جداگانه پاسخ میدهد.
استفاده از REST نسبت به سایر پروتکلها یا معماریهای API آسانتر است. همچنین مزایای متعدد دیگری را ارائه میدهد که آن را به اولین انتخاب برای بسیاری از توسعه دهندگان ساخت API تبدیل میکند:
- قالبهای متنوع پیام: REST API ها بیشتر به همراه JSON برای سریالسازی دادهها استفاده میشوند اما با چندین قالب پیام، از جمله JSON، HTTP، plain text و XML کار میکنند. این مجموعه از امکانات، باعث ایجاد مزیت برای REST API در مقابل پروتکلهایی مانند SOAP که به طور خاص با XML روی HTTP کار میکنند، میشود. با وجود گزینه هایی مانند JSON، که به طور قابل توجهی سبک تر و انعطاف پذیرتر است، REST API بهترین عملکرد را ارائه میکند.
- متدهای HTTP: معمولاً REST با یکی از متدهای GET، POST، PATCH، DELETE یا PUT برای بازیابی دادهها و درخواستها، با توجه به نوع پیادهسازی سرویس، استفاده میشود. این روشها کدهای رایج موفقیت و شکست HTTP را برمیگردانند. روشهای دیگر شامل OPTIONS، HEAD و TRACE هستند اما با تمامی سرویس ها سازگاری ندارند. زیرا برخی از سرویسدهندگان ممکن است صرفا یک روش را بر اساس نیازهای خود پیاده سازی کنند.
- معماری Decoupled یا مستقل: REST دارای یک معماری سرور-کلاینت میباشد، بنابراین منطق آن از نمایش جدا شده است و بخشهای مختلف به صورت همزمان و بدون تداخل کار میکنند.
- مقیاس پذیری: REST API ها ساده هستند که استفاده از آنها را آسان میکند. با این حال اگر نیاز به افزایش مقیاس آن داشته باشید، میتوانید endpoint های جدیدی برای ترکیب منطق پیچیدهتر ایجاد کنید.
- قابلیت ذخیره سازی کش: در حالی که REST به صورت stateless است، پاسخ سرور برای جلوگیری از تکرار درخواستهای اضافی، میتواند روی حافظه کش کلاینت ذخیره شود.
- امنیت: در بیشتر موارد، نقاط پایانی REST از طریق نقاط پایانی HTTPS نمایش داده میشود که تضمین میکند تمام ارتباطات API با استفاده از TLS/SSL ایمن شده است. همچنین REST از سایر روشهای دریافت مجوز و احراز هویت مانند OAuth2 و (JSON Web Tokens (JWT پشتیبانی میکند.
تصویر(2)
Web API چیست؟
برای مقایسه Rest API و Web API باید با هر دو مورد خوب آشنا شوید. Web API صرفا یک رابط برای دسترسی به منابع سرور از طریق HTTP است. Web API میتواند با فناوریهای مختلفی مانند جاوا و ASP.NET ساخته شود. Web API ها از یک رابط متنباز بهره میبرند و بسیاری از عاملهای کاربر مانند مرورگرها، گوشیهای هوشمند، تبلتها و لپ تاپها را پوشش میدهند.
Web API ها مشخصات پروتکل را با مفاهیمی مانند کش، نسخه سازی و فرمتهای مختلف محتوا، پیاده سازی میکنند. Web API با توجه به نحوه ایجاد آن، میتواند REST API باشد یا نباشد. Web API ها معمولا در یک سیستم توزیع شده برای ارائه خدمات در دستگاههای مختلف مانند گوشیهای هوشمند و لپ تاپها استفاده میشوند و محدود به برنامههای تحت وب سمت کاربر هستند.
در ادامه دو نمونه از Web API های پرکاربرد آورده شده است:
- API های گوگل: این api شامل API یوتیوب میشود که به توسعه دهندگان اجازه میدهد تا ویدیوهای YouTube را در پلتفرمهای خود مانند وب سایتها قرار دهند. Google Maps API نیز به توسعه دهندگان اجازه میدهد تا از Google Maps از طریق جاوا اسکریپت یا رابطهای Flash در صفحات وب استفاده کنند.
- API توییتر: شامل API جستجوی توییتر است که متدهایی را برای تعامل با جستجوی توییتر فراهم میکند. REST API به شما اجازه میدهد تا به دادههای توییتر نیز دسترسی داشته باشید.
Web API به صورت "سیستم به سیستم" اجرا میشود. در ادامه نحوه تبادل داده در این api بررسی میشود:
- دستگاه سرویس گیرنده درخواستها را به وب سرور ارسال میکند.
- وب سرور درخواست را دریافت و پردازش مینماید، سپس آن را به دستگاه مشتری ارسال میکند تا اجرا گردد.
- خروجی به کاربر ارائه میشود.
تصویر(3)
ویژگیهای مفید Web APIها عبارتند از:
- معماری سبک: Web APIها در دستگاه هایی با پهنای باند محدود مانند گوشیهای هوشمند بهتر هستند.
- هدرهای پیام توصیفی: Web API ها دارای هدرهای پیام توصیفی یا Descriptive message headers هستند که میتوانند حاوی اطلاعاتی در مورد نوع محتوا، روش امنیتی یا نحوه مدیریت حافظه کش باشند.
- پشتیبانی از انواع داده ها: بدنه یک Web API را میتوان برای هر چیزی، از جمله فایلهای باینری (ویدئوها، تصاویر، فایل متنی)، XML ساده، JSON و HTML استفاده کرد.
- سرویس منبع محور: Web API میتواند منابع را به گونه ای ارائه کند که با معماری REST مطابقت داشته باشد.
- پیکربندی و راه اندازی آسان: Web API ها به راحتی تنظیم و اجرا میشوند.
مقایسه Rest API و Web API
در ادامه با جزئیات بیشتری به مقایسه Rest API و Web API و شباهت ها و تفاوت ها پرداخته خواهد شد:
شباهتهای معماری
در مقایسه Rest API و Web API شباهتهای معماری مشترکی وجود دارد:
Statelessness: درخواستهای HTTP به صورت مجزا انجام میشوند و اساساً stateless هستند. زیرا هر درخواست حاوی اطلاعات کافی برای تکمیل آن میباشد. درخواستهای متعدد فقط از طریق اطلاعات مشترک، مانند کوکیها یا شناسه سشن، با یکدیگر مرتبط میشوند. عدم همگام سازی state، پیچیدگی را کاهش و عملکرد را بهبود میدهد. زیرا سرور نیازی به پیگیری درخواستهای کلاینت ندارد. درخواستهای همزمان نیز میتوانند در چندین سرور پردازش شوند.
معماری لایهای: هر دو از معماری لایهای پشتیبانی میکنند که در آن استقرار API، احراز هویت درخواست و ذخیرهسازی میتواند در چندین سرور انجام شود.
منبع گرا: در معماریهای منبع گرا یا Resource-oriented، منابع به شناسههای منبع یکنواخت (URI) نگاشت میشوند. Web API و REST API منبع گرا هستند زیرا منابع را از طریق URI در معرض نمایش قرار میدهند.
قابلیت ذخیره سازی حافظه کش: در REST API و Web API، کوئری هایی که هر بار فراخوانی میشوند و اطلاعات یکسانی را برمی گرداند، در حافظه کش ذخیره میشوند. به عنوان مثال، اگر خروجی یک فراخوانی OPTION روی endpoint صرف نظر از تعداد فراخوانی یکسان باشد، در حافظه کش ذخیره خواهد شد. این ویژگی که به عنوان idempotence شناخته میشود، مبنای خوبی برای تعیین زمان ذخیره دادهها در حافظه کش میباشد.
تصویر(4)
تفاوتهای معماری
در حالی که در مقایسه Rest API و Web API الگوهای معماری مشابهی وجود دارد اما تفاوتهای کلیدی نیز وجود دارد که در ادامه در مورد آن بحث خواهد شد.
- هماهنگی سمت کلاینت و سمت سرور: REST API ها معماری به هم پیوسته ای دارند که امکان توسعه مستقل در سمت کلاینت و سرور را فراهم میکنند. با Web API ها، تغییرات بین مشتری و سرور هماهنگ تر میشود.
- رابط: با توجه به جزئیات پیاده سازی، REST API ها تمایل دارند از رابطهای استاندارد صنعتی استفاده کنند. Web API ها بسته به ارائه دهنده API از رابطهای سفارشی بهره میبرند.
ارتباط
Web API ها به اندازه کافی انعطاف پذیر هستند تا از هر سبک ارتباطی استفاده کنند، در حالی که REST API ها عمدتاً با JSON، XML و plaintext کار خواهند کرد. REST APIها برای انتقال دادههای متنی، مانند عملیاتهای ایجاد، خواندن، بروزرسانی و حذف (CRUD) در یک پایگاه داده، عملکرد خوبی دارند اما وقتی صحبت از دادههای باینری میشود، محدودتر هستند. Web API ها تجربه بسیار بهتری را برای سرویسهایی که به دادههای باینری نیاز دارند مانند سرویسهای پخش موسیقی یا ویدیو، ارائه میدهند.
موارد استفاده
در حالی که این فرمتهای API در بسیاری از موارد امکان جایگزینی با یکدیگر را دارند اما در شرایط مختلفی نسبت به یکدیگر برتری خواهند داشت:
- سرویسها و اپلیکیشنهای ابری: به دلیل ماهیت stateless یا "بدون حالت"، REST API ها در سرویسهای ابری مورد استفاده قرار میگیرند. زیرا مؤلفههای stateless میتوانند مقیاسبندی و مجدداً مستقر شوند تا تغییرات را تطبیق دهند. بهترین روش برای ارائهٔ خدمات ابری، REST API میباشد زیرا نیاز به کد سفارشی در آن کمتر است.
- سرویسهای استریم: Web API ها دارای پشتیبانی بهتر و سربار پایینی از دادههای باینری برنامه در حافظه یا دستگاههای با پهنای باند محدود هستند. بنابراین برای سرویسهایی که نیاز به پخش استریم دارند، بهترین گزینه میباشند.
- تغییرات در پایگاه داده (CRUD): ارائه قابلیت CRUD از طریق REST API نسبت به Web API ساده تر و آسان تر است.
مدیریت REST API ها برای درخواستهای پیچیدهای که نیازمند دسترسی به منابع نامرتب هستند، دشوار است. این قابلیت به دلیل منابع مرجع URI آن است. به این معنی که مدیریت این نوع موقعیت شامل دستکاری مسیرهای URI، پارامترهای کوئری و بدنه درخواست میباشد که هدف REST را نادیده میگیرد. در این مورد، یک Web API ترجیح داده میشود زیرا امکان سفارشی سازی را فراهم میکند و پشتیبانی گسترده ای از هدرهای پاسخ و درخواست URI دارد. با پشتیبانی از تکنیک هایی مانند تماسهای غیر همزمان که به راحتی با استفاده از معماری REST پیاده سازی نمی شوند، Web API ها راهی برای رفع نیازهای پیچیده API هستند.
جمع بندی نهایی
Web API و REST API ها برای ساخت اپلیکیشنهایی استفاده میشوند که منابع را فراهم کرده و از طریق HTTP ارتباط برقرار میکنند. REST محدودیتهای معماری را روی یک رابط یکنواخت توصیف میکند و Web API ها مفهومی هستند که با توجه به نوع پیادهسازی میتوانند RESTful باشند.
نکته: RESTful یا "Representational State Transfer" یک معماری برای طراحی و پیادهسازی وبسرویسها است که برای انتقال داده از پروتکل HTTP استفاده میکند. در این معماری، هر داده به عنوان یک منبع (resource) شناخته شده و هر منبع با یک شناسه یکتا (URI) شناسایی میشود. درخواستها از طریق HTTP ارسال شده و با استفاده از متدهای HTTP مانند GET، POST، PUT و DELETE اطلاعات ارسالی درخواستدهنده روی منبع مورد نظر اعمال میگردد. در مقایسه Rest API و Web API نشان داده شد که هردو سبک هستند و در بسیاری از موقعیتها قابلیت جایگزینی با یکدیگر را دارند. با این حال Web API ها تجربهای خاصتر و پشتیبانی از انواع پیامها را ارائه میدهند و از تعاملات پیچیده بین سرورها و کلاینتهایی که با دادههای باینری سر و کار دارند، پشتیبانی میکنند.