آشنایی با اصول REST و برنامه نویسی RESTful API های وب

18 دیدگاه

توسعه دهندگان وب به صورت مکرر در مورد اصول REST و ساختار داده RESTful صحبت می کنند زیرا یکی از جنبه های حیاتی توسعه وب مدرن است ولی بعضی اوقات این کار فوق العاده گیج کننده می شود.REST به خودی خود یک تکنولوژی نیست ولی می توان گفت روشی است برای ایجاد API هایی با اصول سازماندهی مشخص.

این اصول ،راهنمای توسعه دهندگان هستند تا بتوانند محیطی یکسان و جهانی برای پردازش درخواست های API ایجاد کنند.

 

در این پست می خواهم تمرین توسعه دادن RESTful را از یک نگاه کلی عقاب گونه توضیح دهم. می خواهم به جای چگونه، در مورد چرا صحبت کنم. البته مقداری وارد هر دو موضوع خواهیم شد . در کل این آموزش برای توسعه دهندگانی است که در هنوز مفهوم REST API را کامل درک نکرده اند.

 

REST برای توسعه دهندگان وب

REST مخفف Representational State Transfer است. این شاید به نظر گیج کننده برسد و توضیحات ویکی پدیا در این مورد شاید آن را پیچیده تر هم بکند. اما امکان ساده کردن این اصطلاح وجود دارد.

REST فقط یک سری از دستور العمل ها و سبک های معماری است که برای انتقال داده ها استفاده می شوند. این عموما در مورد اپلیکیشن های تحت وب کاربرد دارد ولی می تواند داده ها را به سایر برنامه ها نیز ارسال کند.

کلمه API نیز مخفف Application Programming Interface می باشد که به روش های اتصال به سایر کتابخانه ها و برنامه ها اطلاق می شود. ویندوز API های مختلفی دارد ، تویتتر نیز یک API وب دارد که البته کارهای مختلفی را با هدف های متفاوت از هم انجام می دهند.

اگر بخواهم جمع بندی کنم ، RESTful API ها در واقع API هایی هستند که از معماری REST تبعیت می کنند.

 

معماری REST دقیقا چیست ؟

اینجا جایی است که غیر فنی مطرح کردن جزئیات کمی سخت است. ما اینجا یک سری ثابت های معماری در REST داریم ، مثل :

  • ثبات (Consistency) در کل ساختار API
  • موجودیت مستقل (Stateless existence) . مثلا عدم وابستگی به session های سمت سرور
  • استفاده از کدهای وضعیت HTTP در جای مناسب
  • استفاده از نقاط پایانی URL با سلسله مراتب منطقی
  • نسخه بندی (Versioning) در URL به جای درخواست HTTP

دیگر هیچ دستور العملی برای جزئیات بیش از حد مثل جزئیات HTML5 در W3C وجود ندارد که می تواند منجر به سردرگمی شود و بخاری بد بو از عدم قطعیت را در اطراف اصطلاح REST پدید آورد.

در همین رابطه :   چگونه: در Vue.js به REST API با Axios درخواست بفرستیم؟

IMAGE: restful-api-design.readthedocs.io

 

REST یک متدولوژی یا روش شناسی سبُک است که آن را برای انتقال داده های HTTP مناسب می کند. این همان علتی است که REST را در وب اینقدر محبوب کرده است و اینقدر از طرف عموم به عنوان بهترین روش پیاده سازی API شناخته می شود.

همانطور که Vinay Sahni گفته است : ” یک API ،رابط کاربری توسعه دهنده است.” همه چیز باید به راحتی قابل استفاده باشد و یک تجربه کاربری خوب را فراهم کند .هدف RESTful API ها همین است.

 

نکاتی مهم برای RESTful API ها

API User یک توسعه دهنده وب است که می تواند برنامه هایی برای اتصال به سرور خارجی API بنویسد و اطلاعات ضروری روی HTTP به او برگشت داده شوند. توسعه دهنده وب سپس می تواند اطلاعات را در سایت خود نمایش دهد بدون دسترسی شخصی به سرور خارجی API.

در کل از چهار دستور برای دسترسی به RESTful API  استفاده می شود :

  1. GET برای گرفتن یک شی
  2. POST برای ایجاد یک شی
  3. PUT برای ویرایش یا بازنویسی یک شی
  4. DELETE برای حذف یک شی

با هر بار فراخوانی API ،یکی از این متد ها باید به سرور پاس داده شود تا سرور بداند چطور باید رفتار کند.

اکثریت قریب به اتفاق وب API ها فقط درخواست های GET را اجازه می دهند تا بتوان داده ها را از سرور دریافت کرد. احراز هویت کاربر اختیاری است ولی شدیدا ایده خوبی است وقتی که پای متد های حساس و دارای قابلیت خرابکاری مثل PUT و DELETE درمیان باشد.

با این حال بسیاری از RESTful API ها تا این حد پیش نمی روند . Pokéapi را در نظر بگیرید که یک API رایگان برای بازی Pokémon است. این API برای عموم باز است ولی با یک نرخ محدودیت معقول و مناسب (محدودیت کاربران برای تعداد معینی از ارسال درخواست به API در یک بازه زمانی مشخص) . به علاوه این API فقط متدGET را پشتیبانی می کند.شاید این را بتوان اصطلاحا یک API مصرفی نامید.

02-pokemon-api-webapp-service

نوع داده بازگشتی نیز مهم است و باید با همه منابع دیگر همگن و هماهنگ باشد.JSON یکی از انوع داده بازگشتی است که بسیار نیز محبوب است و جزئیات آنلاین آن نیز ساختار داده در آن را به خوبی توضیح داده است.

RESTful API ها از “اسم” برای نامگذاری اشیا و از “صفت” برای نامگذاری کارهایی که قرار است روی اشیا انجام شود استفاده می کند. اعتبارسنجی می تواند بخشی از این باشد همچنین نرخ محدودیت.ولی یک API کوچک و ساده لازم نیست نگران ایجاد محدودیت برای کاربران باشد.

در همین رابطه :   50 فایل PSD بسیار زیبا و رایگان از سایت Dribbble برای استفاده و آموزش

 

دسترسی به منابع API

API های عمومی معمولا از طریق آدرس های وب سایت در دسترس هستند.این به این معنی است که ساختار آدرس (URL) مهم است و فقط بای دبرای API استفاده شود تا تداخلی بین آدرس ها نباشد.بعضی از API های می توانند برای نسخه های بروز شده خود ، یک پیشوند به آدرس اضافه کنند مثلا /v2/ . این روش برای توسعه دهندگانی است که نمی خواهد نسخه قبلی API شان منقرض شود و می خواهند در عین حال که نسخه قبلی قابل استفاده است ، به کاربران امکان استفاده از نسخه جدید را نیز بدهند.

برای اطلاعات بیشتر در این زمینه من این مطلب را دوست داشتم که در مورد ساختار ساده URL توضیحاتی داده است و چند مثال نیز از سرویس های دیگر آورده است.

دقت کنید که داده بازگشتی از طرف API می تواند به صورت کلی بوسیله متدهای HTTP تغییر یابد.برای مثال GET داده ها را دریافت کند ولی POST اطلاعات جدیدی ایجاد کند.بر همین اساس درخواست می تواند به آدرس یکسانی از API ارسال شود ولی نتیجه می تواند بسیار متفاوت باشد.

03-reddit-api-documentation

مشاهده نمونه های مشابه آنلاین ممکن است به شما برای درک بهتر مفاهیم کمک کند . ما قبلا در مورد Pokeapi صحبت کردیم ولی بعضی دیگر از نمونه API ها در دنیای واقعی هستند که می توان آنها را مطالعه کرد:

 

API خودتان را بسازید

مراحل ایجاد یک API برای خودتان نمی تواند خیلی راحت باشد ولی آنقدر ها هم که فکر می کنید سخت و پیچیده نیست. فقط نیاز به آشنایی با الگوهای طراحی API و انتخاب بهترین روش ها دارید تا چیزی را بسازید که ارزش واقعی داشته باشد. هر API باید به سرور شما وصل شود تا داده ها را برگشت دهد. شما نه تنها نیاز به کدنویسی برای انجام این کار دارید بلکه باید داده های برگشتی را فرمت دهی کنید (مثلا به JSON). دیگر نیازمندی های بالقوه شامل اعتبارسنجی (Authentication) و اعمال محدودیت های مختلف برای امنیت و پایداری بیشتر می شود . همانطور که می بینید این کار کار یک قلب ضعیف نیست !

اما اجازه دهید به برخی از اصول ساده معماری API ها نگاهی بیندازیم .

 

نقاط پایانی کار را ایجاد کنید

یکی از جنبه های ایجاد API ایجاد نقاط پایانی در ساختار URL است . وقتی دارید منابع (Resources) را ایجاد کنید نیاز دارید تا از اسم استفاده کنید نه از صفت. این به این معنی است که داده های API باید به صورت شخص, مکان و یا چیزی برگشت داده شوند. اغلب هم چیزی با خصیصه های معین (مثلا یک توییت با همه متادیتا هایش).

در همین رابطه :   اسنیپت : روش پیدا کردن تعداد روزها و ساعت ها بین دو تاریخ مختلف

یادگیری اسم گذاری مثل روش فوق شاید سخت باشد ولی یکی از جنبه های حیاتی طراحی API هاست.ساده سازی هر زمانی که ممکن باشد بهترین راه است .

یکی از نقاط بحث برانگیز استفاده از اسم های مفرد یا اسم های جمع است.مثلا اگر شما در حال طراحی API برای Twitter باشید می توانید یکی از دو راه زیر را در نظر بگیرید:

$ /tweet/15032934882934
$ /tweets/15032934882934

در این مورد به نظرم اسم مفرد بهتر است .مخصوصا وقتی یک منبع قرار است برگشت داده شود(توییت). ولی جواب 100٪ قطعی و مستندسازی شده ای برای این سوال وجود ندارد و بهتر شما با توجه به پروژه خودتان بهترین را انتخاب کنید.

 

تنظیم نوع داده برگشتی

موردی دیگری که توجه خاصی می طلبد نوع داده برگشتی از API است.خیلی از کاربران وب از API انتظار دریافت داده از نوع JSON را دارند پس این بهترین گزینه می تواند باشد.XML یکی از گزینه های دیگر است اگر می خواهید هر دو را در اختیار کاربران قرار دهید.با این حال اساسی ترین گزینه همان JSON است که صحبتش را کردیم .

جزپیات زیادی در مورد طراحی API ها وجود دارد . من پیشنهاد می کنم شما ابتدا با API های دیگر مثل Instagram,Twitter, Linkedin و … بازی کنید تا ببینید دیگر توسعه دهندگان چگونه API هایشان را می سازند و اینگونه با روش های مرسوم این حوزه بیشتر آشنا خواهید شد.

اگر می خواهید شروع کنید می توانید از این منابع استفاده و کدهایش را تغییر دهید :

منابع بیشتر

بهترین راه برای یادگیری وب فقط تمرین است ولی بهترین محل برای شروع توسعه دادن API اتصال به API های دیگر است . منابع زیر نیز می توانند به شما در این راه کمک کنند:

کتاب ها

مقالات

منبع

دسته بندی : PHPطراحي وب

18 نظر

  1. با سلام

    واقعا خیلی روون توضیح دادین و عالی بود به خصوص مثال های api ها. فقط جای امنیت تو مقالتون خالی بود مثلا موارد sql injection که فکر میکنم مهم هستن

  2. سلام
    ببخشید خواستم بدونم header و body که توسط retrofit در اندروید فرستاده میشود باچه کدی در سمت سرور
    با php دریافت میشود

    1. رست رو متوجه نمی شید یا رست فول رو ؟ چون رست یه نوع معماریه و رست فول به api که از این معماری استفاده کرده باشه گفته میشه.
      برای درک بهتر این معماری بهتره اون رو با رقیبان اش مثل graphql فیس بوک مقایسه کنین : https://medium.com/codingthesmartway-com-blog/rest-vs-graphql-418eac2e3083

  3. خداوکیلی روی زبان فارسیتون هم یکم کار کنید راه دوری نمیره .اگه تونستین یه متن فارسی روون و خوب بنویسین .

  4. جزپیات زیادی در مورد طراحی API ها وجود دارد . من پیشنهاد می کنم شما ابتدا با API های دیگر مثل Instagram,Twitter, Linkedin و … بازی کنید تا ببینید دیگر توسعه دهندگان چگونه API هایشان را می سازند و اینگونه با روش های مرسوم این حوزه بیشتر آشنا خواهید شد.
    اشتباه تایپی…….

  5. ممنون خیلی خوب بود که زیاد از لغات تخصصی استفاده نکردید و اگر هم کردید سعی کردین توضیح بدین ، میخواستم رست رو برای کسی که به برنامه نویسی آشنا نیست یاد بدم همه لینک ها خیلی سنگین توضیح میدادن .

    1. خیلی خوشحالم براتون مفید بوده دوست من . لطفا بازم سر بزنید به سایت خودتون سعی می کنیم مطالب بهتری قرار بدیم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *