REST (مخفف عبارت Representational State Transfer) یک مدل معماری برای ساخت APIها است. این معماری شامل یکسری از قوانین است که نحوه طراحی و توسعه یک API را مشخص کرده و درک و استفاده از آن را برای توسعهدهندهها آسان میکند. REAT APIها به سبب سادگی، انعطاف و مقیاسپذیری بین توسعهدهندهها محبوب هستند. بسیاری از سایتها و سرویسهای پرکاربرد و معروف مانند توییتر، فیسبوک و گوگل از REST APIها استفاده میکنند.
در این پست، ما به طور کامل در مورد REST APIها، نحوه کار و و دلایل کاربرد گسترده آنها صحبت میکنیم.
REST APIها چطور کار میکنند؟
REST APIها از پروتکل HTTP برای برقراری ارتباط بین کلاینت و سرور استفاده میکنند. پروتکل HTTP به طور عمده برای برقراری ارتباط در سطح وب به کار میرود. این پروتکل بر اساس مدل درخواست-پاسخ طراحی شده که در آن کلاینت یک درخواست به سرور ارسال و سرور نتیجه پردازش درخواست را در پاسخ به کلاینت ارسال میکند.
REST APIها از متدهای HTTP برای تعیین وضعیت پاسخ بازگشتی استفاده میکنند. متداولترین متدهای HTTP که در REST APIها به کار میرود شامل موارد زیر هستند:
متد GET: از این متد برای بازیابی ریسورس از سرور استفاده میشود. این متد متداولترین متد مورد استفاده در REST APIها است.
متد POST: به منظور ارسال ریسورس به سرور و ساخت یک ریسورس جدید استفاده میشود.
متد PUT: این متد HTTP برای بهروزرسانی ریسورسها و ریسورسهای موجود در سرور مورد استفاده قرار میگیرد.
متد DELETE: متد DELETE برای حذف یک ریسورس یا ریسورس در سرور به کار میرود.
کدهای وضعیت
همچنین REST APIها از کدهای وضعیت HTTP برای تعیین خروجی یک پاسخ بهره میبرند. متداولترین کدهای وضعیت شامل موارد زیر میشود:
۲۰۰ (OK): درخواست موفقیتآمیز بوده و ریسورس درخواستی با موفقیت ارسال شده است.
۲۰۱ (Created): درخواست موفق بوده و یک ریسورس جدید در سرور ایجاد شده است.
۴۰۰(Bad Request): درخواست نامعتبر بوده و قابل پردازش نیست.
۴۰۱ (Unauthorized): درخواست نیاز به احراز دسترسی دارد و قابل انجام نیست.
۴۰۴ (Not Found): ریسورس درخواستی در سرور پیدا نشد.
۵۰۰ (Internal Server Error): حین پردازش درخواست در سرور یک خطای داخلی اتفاق افتاده است.
علاوه بر این، REST APIها از URI (مخفف عبارت Uniform Resource Identifier) برای تشخیص ریسورسها بهره میبرند. URI در واقع رشتهای از کاراکترها است نام یک ریسورس را مشخص میکند و از آن برای تعیین مکان یک ریسورس مانند فایل HTML یا یک عکس استفاده میشود.
REST APIها از Media Types یا MIME Types برای تعیین فرمت داده ارسالی یا دریافتی استفاده میکنند. متداولترین مدیا تایپها شامل application/json، test/html و image/jpeg میشود.
مزایای REST APIها
دلایل مختلفی برای محبوبیت REST APIها وجود دارد، از جمله:
سادگی: REST APIها از پروتکل ساده و قدیمی HTTP استفاده میکنند که کار توسعهدهندهها را برای استفاده یا توسعه آنها راحت میکند.
انعطاف: REST APIها منعطف بوده و میتوانند توسط هر نرمافزار یا سختافزاری که توانایی ارسال درخواست HTTP دارد، استفاده شوند.
مقیاسپذیری: REST APIها طوری طراحی شدهاند که مقیاسپذیر باشند تا بتوانند حجم بزرگی از داده را بدون اختلال رد و بدل کنند.
Loose Coupling یا اتصال سست: REST APIها دارای اتصال سست هستند که یعنی مستقل از کلاینت و سرور رفتار میکنند. این موضوع به کلاینت و سرور اجازه میدهد تا مستقل از یکدیگر رشد و توسعه پیدا کنند.
مستقل از زبان: از REST APIها میتوان در هر زبانی که قابلیت ساخت درخواستهای HTTP دارد استفاده کرد.
استفاده از REST APIها
برای استفاده از REST APIها باید کلاینتی داشته باشیم که بتواند درخواست HTTP ارسال و دریافت کند. راههای مختلفی مانند استفاده از مرورگر، cURL، یا زبانهای برنامهنویسی مانند جاوا، پایتون یا روبی برای بهره بردن از RESTAPIها وجود دارد. در ادامه مثالهایی از روشهای متفاوت برای استفاده از REST APIها را مشاهده میکنید.
استفاده از REST API با مرورگر
برای استفاده از API با مرورگر، کافی است تا URL مربوط به API را در نوار آدرس وارد کنیم تا درخواست ارسال شود. به عنوان مثال، برای دریافت آخرین توییتها از سایت توییتر کافی است تا URL زیر را در نوار آدرس وارد کنید:
۱ |
https:&#۰۴۷;/api.twitter.com/1.1/statuses/home_timeline.json |
با این کار یک درخواست GET به API توییتر ارسال و در پاسخ آخرین توییتها را در فرمت JSON دریافت میکنید.
نکته: مرورگر تنها می تواند درخواست GET ارسال کند و توانایی ارسال سایر متدهای HTTP را ندارد.
استفاده از REST API با cURL
cURL یک ابزار خط فرمان است که میتوان از آن برای ارسال درخواستهای HTTP استفاده کرد. این ابزار برای سیستمهای عامل ویندوز، macOS و لینوکس در دسترس است. برای استفاده از REST API کافی است تا کد زیر را در cURL وارد کنید:
۱ |
curl -X GET https://api.twitter.com/1.1/statuses/home_timeline.json |
این کد یک درخواست GET به API ارسال میکند و مانند URL قبلی، آخرینها توییتها را در قالب JSON باز میگرداند.
استفاده از REST API با زبانهای برنامهنویسی
برای این کار میتوانید یکی از کتابخانهها یا فریمورکهای پرشمار در زبانهای مختلف را استفاده کنید. برای مثال، در زبان جاوا شما میتوانید از کتابخانه Apache HttpClient برای ارسال درخواستهای HTTP بهره ببرید.
۱ ۲ ۳ ۴ ۵ |
HttpClient httpClient = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.twitter.com/1.1/statuses/home_timeline.json")) .build(); HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); |
امنیت در REST APIها
روشهای مختلفی مانند احراز هویت ساده، OAuth و JSON Web Tokens (یا JWTs) را میتوان برای افزاشی امنیت REST APIها به کار برد.
احراز هویت ساده
این مدل یک روش احراز هویت ساده است که در آن کلاینت یک هدر HTTP به همراه نام کاربری و رمز عبور را به متن ساده ارسال میکند. این روش امنیت پایینی دارد چرا که در آن اطلاعات هویتی به صورت متن ساده ارسال میشوند و در صورت لو رفتن، به سادگی قابل دسترسی هستند. نحوه ارسال هدر HTTP به صورت زیر است:
۱ |
Authorization: Basic base64_encode(username:password) |
در اینجا سرور رشته رمزنگاری شده base64 را رمزگشایی کرده و نام کاربری و رمز عبور را با اطلاعات موجود در پایگاه داده یا سیستم احراز هویت مقایسه میکند. اگر اطلاعات هویتی مطابقت داشته باشند، درخواست پردازش میشود.
OAuth
OAuth یا Open Authentication یک استاندارد احراز دسترسی درخواستهای API است. این روش به کاربران اجازه میدهد تا بدون نیاز به اشتراکگذاری اطلاعات هویتی، به ریسورسها دسترسی داشته باشند. در روش OAuth، کلاینت یک توکس دسترسی از سرور میگیرد و از آن برای احراز هویت درخواستهای بعدی بهره میبرد. توکن دسترسی یک رشته است که بیانگر اجازه دسترسی کاربر است. این توکن به طور معمول زمان محدودی دارد و بعد از مدت معینی باید دوباره صادر شود.
برای استفاده از OAuth در API، ابتدا کلاینت باید یک توکن دسترسی از سرور بگیرد. این کار از طریق هدایت کاربر به صفحه لاگین و درخواست اجازه دسترسی به ریسورسها صورت میگیرد. وقتی کاربر اجازه دسترسی را صادر کند، سرور یک توکن دسترسی به کاربر اختصاص میدهد. سپس کاربر میتواند با قرار دادن این توکن در هدر HTTP، از آن برای احراز هویت درخواستهای بعدی استفاده کند.
(JSON Web Tokens (JWTs
JSON Web Tokenها نیز یکی از روشهای محبوب برای برای احراز امنیت API به شمار میروند. این توکنهای خودکفا شامل اطلاعات مختلفی مانند اطلاعات هویتی کاربر هستند. مانند OAuth، برای استفاده از این توکنها در API، ابتدا کلاینت باید یک JWT از سرور دریافت کند.این کار از طریق ارسال درخواستی با اطلاعات هویتی کاربر (نظیر نام کاربری و رمز عبور) است. پس از تایید اطلاعات، JWT برای کاربر صادر شده میتوان از آن برای احراز هویت درخواستهای بعدی بهره برد.
REST APIها، محبوب توسعهدهندهها
معماری REST یک راه ساده و محبوب برای توسعه API است. REST APIها از پروتکل ساده HTTP برای تبادل پیام بین کلاینت و سرور استفاده میکنند. راههای مختلفی مانند احراز هویت ساده، OAuth و JWTها برای بهبود امنیت REST APIها وجود دارد. REST APIها منعطف، مقیاسپذیر و مستقل از زبان هستند که به این دلیل، معماری REST را برای توسعه APIها بسیار مناسب است.