فارغ از این که با کدام زبان برنامهنویسی یا تکنولوژی کار میکنید، احتمالاً تا به حال با رابط برنامهنویسی اپلیکیشن REST (API) مواجه شدهاید. REST مخفف Representational State Transfer است که امروزه یکی از پرکاربردترین سبکهای معماری برای سرویسهای وب، مایکروسرویسها و APIها است. APIهایی که از سبک معماری REST پیروی میکنند، APIهای REST در نظر گرفته میشوند.
چه یک توسعهدهنده جوان باشید چه یک برنامهنویس ارشد، ممکن است در مصاحبهای درباره REST API از شما سؤالاتی پرسیده شود. برای کمک به شما در این گونه مصاحبهها، در مورد برخی از پرسش و پاسخهای متداول در یک مصاحبه REST API صحبت خواهیم کرد.
13 پرسش کلیدی در یک مصاحبه REST API که باید بدانید
1. REST چیست؟
REST مخفف Representational State Transfer و یک سبک معماری برای توسعه وب است. معماری REST دستورالعملهایی را برای انتقال Representationهای منابع بین کلاینتها و سرورها، در بستر وب ارائه میکند.
2. REST API چیست؟
REST API یا RESTful API یک API وب است که با سبک معماری REST مطابقت دارد.
3. محدودیتها و مزایای سبک معماری REST را توضیح دهید.
در صورتی که منظور آنها 6 نوع محدودیت (constraint) است، سوال بعدی درباره محدودیتهای اختیاری پاسخ پرسش آنها است. در غیر این صورت، یک API که واقعاً RESTful است، باید با پنج محدودیت معماری REST مطابقت داشته باشد:
Uniform interface
- رابط (interface) بین کلاینت و سرور که امکان ارتباط استانداردساز شده مشتری و سرور را در یک زبان واحد فراهم میکند.
- برای جداسازی کلاینت و سرور ضروری است.
Client-server
- مدلی برای پیشگیری از مشکلات احتمالی بین کلاینت و سرور و جداسازی آنها است.
- به کلاینت و سرور اجازه میدهد تا به طور مستقل از یکدیگر عمل کرده و تکامل یابند.
- از قابلیت پرتابلپذیری و مقیاسپذیری پشتیبانی میکند.
Stateless
- به پروتکل ارتباطی Stateless اشاره دارد که در آن سرور هیچ اطلاعاتی را در مورد وضعیت session ذخیره نمیکند.
- با کاهش بار سرور، عملکرد را بهبود میبخشد.
Cacheable
- سرورها پاسخهای خود را به عنوان cacheable یا non-cacheable مشخص میکنند.
- کلاینتها و واسطهها میتوانند پاسخهای سرور را در حافظه کش ذخیره کنند.
- تعامل کلاینت و سرور را کاهش میدهد و از مقیاسپذیری و عملکرد پشتیبانی میکند.
Layered system
- لایههای بین کلاینت و سرور، میتوانند از واسطههایی مانند سرورهای پروکسی یا load balancerها تشکیل شوند.
- لایهها وظایف جداگانهای دارند اما قادر به تعامل با یکدیگر هستند.
- از مقیاسپذیری و امنیت سیستم پشتیبانی میکنند.
4. محدودیتهای اختیاری (optional) معماری REST را توضیح دهید.
Code on demand محدودیت اختیاری معماری RESTful است. Code on demand به سرور اجازه میدهد تا کدهای اجرایی (اسکریپتها یا اپلتها) را در صورت درخواست کلاینت، برای کلاینت ارسال کند.
مزیت: عملکرد کلاینت را بهبود میبخشد. زیرا کلاینت میتواند ویژگیها را پس از استقرار دانلود کند.
نقطه ضعف: visibility را کاهش میدهد. به همین دلیل، اختیاری یا optional درنظر گرفته میشود.
مثال: appletهای جاوا و جاوا اسکریپت
5. محدودیتهای uniform interface را توضیح دهید.
یک uniform interface برای جداسازی کلاینت از سرور لازم است.
برای دستیابی به uniform interface، چهار محدودیت (constraint) لازم است:
شناسایی منابع: درخواستهای کلاینت باید منابع را با استفاده از شناسههای یکنواخت منبع (URI) شناسایی کند.
دستکاری منابع از طریق این نمایشها: وقتی کلاینتها یک نمایش منبع را از سرور دریافت میکنند، تمام اطلاعات لازم برای تغییر وضعیت را در اختیار دارند.
پیامهای خود-توصیفگر: پیامها حاوی تمام اطلاعات لازم برای تفسیر گیرنده، از جمله متادیتا هستند.
Hypermedia بهعنوان موتور وضعیت اپلیکیشن: Hypermedia (مانند HTML) مدیومی برای تعامل کلاینت-سرور است و کلاینت برای درک پاسخهای سرور به هیچ سند ویژه API نیاز ندارد.
6. CRUD چیست؟
CRUD مخفف چهار عملیات اساسی مورد استفاده در سیستم relational مدیریت دیتابیس (RDBMS) است.
هر عملیات در CRUD مربوط به یک روش HTTP است که REST از آن پشتیبانی میکند.
ایجاد: POST
خواندن: GET
آپدیت: PUT
حذف: DELETE
7. روشهای درخواست HTTP پشتیبانی شده توسط REST و زمان استفاده از آنها را توضیح دهید.
APIهای REST بر اساس درخواستها یا افعال HTTP هستند که هر کدام وظایف متفاوتی را انجام میدهند.
REST از درخواست های HTTP زیر پشتیبانی می کند:
- GET: درخواست دیتا از سرور.
- POST: دادهها را برای ایجاد منبع جدید در URL تعریفشده توسط سرور ارسال کنید.
- PUT: دادهها را برای بهروزرسانی یک منبع در URLتعریفشده توسط کلاینت ارسال کنید.
- DELETE: حذف منبع از سرور.
- OPTION: روشهای درخواست بازگشت که توسط یک سرویس پشتیبانی میشوند.
- HEAD: برگرداندن اطلاعات متا مثل هدرهای پاسخ.
- PATCH: بخشی از منبع موجود در سرور را تغییر دهید.
8. تفاوت بین روشهای PUT و POST چیست؟
این سؤال میتواند برخی از توسعهدهندگان را دچار مشکل کند. توانایی توضیج دادن این موضوع به شما کمک میکند به عنوان فردی شناخته شوید که واقعاً میداند در مورد چه چیزی صحبت میکند.
در اینجا تفاوتهای بین PUT و POST توضیح داده شده است:
PUT
- Idempotent (یعنی درخواستهای مختلف نتیجه یکسانی دارند.)
- پاسخهای PUT قابل ذخیرهسازی نیستند.
- منبع هدف را با payload درخواست، آپدیت یا جایگزین میکند.
POST
- Not idempotent (یعنی درخواستهای متعدد بازدهی از یک منبع را به همراه خواهد داشت.)
- پاسخهای POST میتوانند قابل ذخیرهسازی باشند، به شرطی که هدر cache-control مناسب داشته باشند.
- Payload درخواست توسط وبسور بر اساس منبع هدف پردازش میشود.
درک idempotency: ضرب اعداد در عدد 1، مثالی از یک عملیات idempotent است. مهم نیست که چندبار پنج را ضربدر یک کنید، نتیجه همان است.
9. منظور از بیتابعیتی (statelessness) در REST را توضیح دهید.
بیتابعیتی به این معنی است که کلاینت و سرور اطلاعات وضعیت یکدیگر را ذخیره نمیکنند. از آنجایی که سرور هیچ اطلاعاتی را ذخیره نمیکند، با هر درخواست کلاینت به عنوان یک درخواست جدید برخورد میکند.
در نتیججه شرایط زیر اعمال خواهد شد.
- درخواست کلاینت شامل تمام اطلاعات مورد نیاز سرور برای پردازش درخواست است.
- اپلیکیشن کلاینت مسئول ذخیرهسازی وضعیت جلسه است.
10. مزایا و معایب REST API چیست؟
دانستن مزایا و معایب RESTful API بسیار مهم است.
مزایای آن عبارتاند از:
- کارایی بالایی دارد و پرتابل، قابل اطمینان و مقیاسپذیر است.
- جداسازی کلاینت و سرور به هر یک از آنها اجازه میدهد تا به صورت جداگانه عملیات و گسترش خود را انجام دهند.
- تست آن آسان است و به راحتی با محیطهای مختلف منطبق میشود.
- یادگیری آن آسان است زیرا از پروتکل HTTP استفاده میکند.
- از فناوریهای مختلف انتقال داده از جمله JSON، XML، YAML، images و غیره پشتیبانی میکند.
- از پهنای باند کمتری نسبت به روشهای دیگر مانند فناوری پروتکل دسترسی ساده به آبجکتها (SOAP) استفاده میکند.
معایب آن عبارتاند از:
- اقدامات امنیتی را اجرا نمیکند.
- روش HTTP شما را به درخواستهای همزمان محدود میکند.
- به دلیل بیتابعیتی، ممکن است نتوانید وضعیت را حفظ کنید. (مثلاً در جلسات)
11. تفاوت بین AJAX و REST چیست؟
این تمایز میتواند توسعهدهندگان مبتدی را گیج کند. بنابراین دانستن آن مفید است.
یک کلاینت AJAX میتواند یک درخواست RESTful به یک REST API (مثلاً درخواست get) بفرستد، اما AJAX یک سبک معماری نیست. بلکه یک تکنیک توسعه وب برای اپلیکیشنهای سمت کلاینت است. REST APIها توسط کلاینتهای AJAX قابل دسترسی هستند، اما آنها به طور ذاتی با AJAX پیادهسازی نمیشوند.
12. تفاوت بین SOAP و REST چیست؟
اگرچه برخی از APIهای REST از پروتکلهای SOAP استفاده میکنند، REST و SOAP رویکردهای کاملاً متفاوتی برای ساخت API هستند. مصاحبهکنندگان ممکن است برای ارزیابی عمق درکتان، این سؤال را از شما بپرسند.
برخی از تفاوتهای بین SOAP و REST عبارتاند از:
SOAP
- پروتکل است.
- فرمت دادهها به XML محدود شده است.
- سنگین وزن است و به پهنای باند بیشتری نیاز دارد.
- Callها را نمیتوان کش کرد.
REST
- یک سبک معماری است.
- به فرمتهای مختلف داده از جمله متن ساده، HTML، XML، JSON و YAML اجازه میدهد.
- سبک است و به پهنای باند کمتری احتیاج دارد.
- Callها را میتوان کش کرد.
13. Status Codeهای پاسخ HTTP را توضیح دهید.
کدهای پاسخ HTTP نتیجه درخواستهای کلاینت را نشان میدهد.
Status Codeهای معمول HTTP عبارتاند از:
- 200: Successful request
- 201: Entity or entities created from successful request
- 400: Bad request. Invalid client request.
- 401: Unauthorized. User isn’t authorized to access a resource and may be unauthenticated
- 403: Forbidden. User isn’t authorized to access a resource, user is authenticated
- 404: Not found. Resource not found
- 500: Internal server error. Generic server error
- 502: Bad gateway. Response from upstream server is not valid
- 503: Service unavailable. Result of server-side issue, including overload or system failure
جمعبندی
تبریک میگویم! اکنون آماده پاسخ دادن به پرسشهای متداول در یک مصاحبه REST API هستید. جایی که برای مصاحبه انتخاب میکنید بستگی به خود شما دارد. به منظور آمادگی برای این مصاحبه، توصیه میشود که متن فوق را چندین بار بخوانید.
منبع: Grokking Tech Interview
Leave feedback about this