در این مقاله، قرار است با REST آشنا بشویم و ببنیم که چه طوری به ما اجازه می دهد تا با سرور ارتباط بهتری برقرار کنیم. ولی قبل از اینکه به REST بپردازیم، لازم است کمی درباره ی API بدانیم، چرا که در درک بهتر REST تاثیر زیادی دارد.
API چیست؟
از آنجایی که این مقاله ی دربارهی REST API است، پس تعریف ما از API فراتر از محدوده وب نخواهد بود.
API مخفف Application Programming Interface است. یک API بین برنامه ها ارتباط برقرار می کند تا بتوانند داده ها را انتقال دهند. برنامه ای که API دارد، یعنی بخشی از داده هایش را در معرض دید مشتری قرار داده است. حالا این مشتری می تواند یک برنامه ی خارجی باشد یا Front-end همان برنامه ی وب باشد.
برای به دست آوردن این داده ها، یک درخواست با ساختاری مشخص باید به API ارسال شود. اگر درخواست الزامات مورد نظر را برآورده کند، پاسخی که حاوی دادهها است، به محل درخواست ارسال میشود. این پاسخ معمولاً به صورت JSON یا XML ارائه می شود.
در برخی موارد، برای دسترسی به داده های API خارجی به نوعی مجوز نیاز دارید.
هر API دارای مستندی است که به شما می گوید چه داده هایی در دسترس است و چگونه درخواست خود را ساختار دهید تا پاسخ معتبری دریافت کنید.
مثال API
بیایید از یک سناریوی واقعی برای مثال زدن استفاده کنیم. تصور کنید برای سفارش غذا به یک رستوران جدید رفته اید و از آنجایی که قبلاً آنجا نرفته اید، دقیقاً نمی دانید چه نوع غذایی را سرو می کنند. سپس گارسن (Server) با منویی به شما نزدیک می شود تا غذایی که می خواهید بخورید را سفارش دهید. پس از انتخاب، گارسن به آشپزخانه می رود و غذای شما را می گیرد.
در این مثال، گارسن همان API است که شما را به آشپزخانه متصل می کند. مستندات API هم منویی هست که گارسن برای شما می آورد. درخواست شما زمانی انجام می شود که غذایتان را انتخاب کنید، و پاسخ هم غذایی است که برای شما آماده شده و سرو می شود.
امیدوارم با این مثال، مفهوم API برایتان بهتر جا افتاده باشد.
REST چیست؟
REST مخفف عبارت Representational State Transfer است. REST (بخوانید رِست) طراحی و توسعه ی فرآیندهای تعامل با داده های ذخیره شده روی سرورهای وب را استاندارد کرده است.
تعریف بالا خیلی "حرفه ای" بیان نشده است و شاید در مقاله های دیگر، تعریف های بهتری را بخوانید. ولی در این تعریف اصلی ترین مشخصه های REST API بیان شده است و درک آن را راحت تر کرده است. یکی از این موارد استفاده از عبارت استاندارد در این تعریف است و این که ارتباط کلاینت و سرور را طبق یک استانداردی تعریف و مدیریت می کند.
شاید تا بحال عبارت RESTful را زیاد شنیده باشید. به API هایی که شش قاعده ی اصلی در REST را رعایت کرده باشد RESTful گفته می شود.
ما می توانیم با سرورها، از طریق شیوه نامه (Protocol) HTTP ارتباط برقرار کنیم. با این شیوه نامه ها می توانم اطلاعات را ذخیره کنیم Create)، بخواینم (Read)، تغییر بدهیم (Update) یا حدف کنیم (Delete). که به این چهار عمل اصلی که روی داده ها می توانیم انجام بدهیم به طور خلاصه CRUD گفته می شود. این اصطلاح را ممکن است در مباحث دیگری مثل موضوعات دیتابیس هم بشنوید.
اما چگونه می توانیم عملیات CRUD را انجام دهیم و با داده های روی سرور ارتباط برقرار کنیم؟
ما میتوانیم این کار را با ارسال درخواستهای HTTP انجام دهیم، و اینجاست که REST وارد میشود. REST با ارائه روشها (method)، عملیات و افعال مختلف HTTP که برای ارسال درخواستها به سرور می توانیم از آنها استفاده کنیم، فرآیند ارتباط را ساده میکند.
چطور با استفاده از REST API با سرور ارتباط برقرار کنیم؟
همانطور که در بالا هم گفتم، API های REST با ارائه روش های مختلف HTTP، فرآیند ارتباط با سرور را برای ما آسان تر می کنند. متداول ترین روش های مورد استفاده عبارتند از:
GET: از روش get برای خواندن داده ها در سرور استفاده می شود.
POST: از روش post برای ایجاد داده استفاده می شود.
PATCH/PUT: روش patch برای به روز رسانی داده ها استفاده می شود.
DELETE: روش delete برای حذف داده ها استفاده می شود.
این روش های ارائه شده توسط REST به ما اجازه می دهد تا عملیات CRUD را به راحتی انجام دهیم. به این معنا که:
Create => POST
Read => GET
Update => PATCH/PUT
Delete => DELETE
بنابراین اگر بخواهیم از یک سرور درخواست کنیم دادههایی را به ما بدهد، کافی است یک درخواست GET به آدرس URL ای که توسط سرور برای این کار معرفی شده است بفرستیم.
اگر درخواست ارائه شده معتبر باشد، سرور با داده هایی که ما درخواست کرده ایم به ما پاسخ می دهد. همچنین یک کد وضعیت ارسال می کند که در آن 200 موفقیت آمیز و 400 خطایی است که توسط کلاینت اتفاق افتاده است یا به عبارت دیگر ساختار مناسب برای درخواست رعایت نشده است.
در اینجا نمونه ای از درخواستی است که با استفاده از جاوا اسکریپت به JSONPlaceholder API ارسال شده است:
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json => console.log(json))
وقتی از fetch برای ایجاد یک درخواست استفاده می کنیم، به طور پیش فرض از روش GET استفاده می شود. پس مجبور نیستیم روش ارتباطی مان را مشخص کنیم ولی در صورتی که بخواهیم از بقیه ی روش های ارتباط از طریق HTTP استفاده کنیم، باید آن روش را به طور دقیق مشخص کنیم.
در کد بالا، آدرس URLای که درخواست مان را برای آن ارسال کرده ایم https://jsonplaceholder.typicode.com است و دادههای خاصی که درخواست میکنیم یکی از todos های ثبت شده است. در نتیجه ی این درخواست ما سرور داده های پاسخ خود را در قالب JSON به ما بازمیگرداند.
برای حذف باید از روش درخواست مربوطه به همراه شناسه موردی که میخواهیم حذف کنیم استفاده کنیم. مثل این:
fetch('https://jsonplaceholder.typicode.com/posts/3', {
method: 'DELETE',
});
در کد بالا از میان post ها، مورد شماره ی 3 را درخواست کرده ایم حذف شود.
درخواست تغییر اطلاعات موجود در سرور، به شناسه و اطلاعات جدید نیاز دارد که برای به روز رسانی داده ها استفاده می شود. به عنوان مثال:
fetch('https://jsonplaceholder.typicode.com/posts/5', {
method: 'PATCH',
body: JSON.stringify({
title: 'new todo',
}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
})
.then((response) => response.json())
.then((json) => console.log(json));
نتیجه
در این آموزش، شما یاد گرفتید که REST چیست و چگونه به ما کمک می کند تا به طور موثر با سرور ارتباط برقرار کنیم.
ما یک API تعریف کردیم و برای کمک به توضیح معنای آن مثالی را مطرح کردیم. ما همچنین با برخی از روش های ارائه شده توسط REST برای ایجاد، خواندن، تغییر و حذف داده های ذخیره شده در سرور آشنا شدیم.
امیدوارم این مقاله برای شما مفید بوده باشد. پیشنهاد میکنم برای درک بهتر و عمیق تر این مفهوم بسیار مهم در برنامه نویسی، دوره ی آموزش RESTful API را در سایت سکان آکادمی بخوانید. همچنین مقاله ی API چیست؟ را هم پیشنهاد می کنم برای آشنایی با API مطالعه بفرمایید.