Sadra Z.Khamneh
Sadra Z.Khamneh
خواندن ۶ دقیقه·۴ سال پیش

HATEOAS چیست و چرا باید از آن استفاده کنیم ؟(قسمت اول)


HATEOAS (hypermedia به عنوان موتور حالت برنامه) یک محدودیت مهم REST است. بدون آن، REST API را نمی‌توان RESTful در نظر گرفت و بسیاری از مزایایی که ما با اجرای یک معماری REST بدست می‌آوریم در دسترس نیستند.

hypermedia به هر نوع محتوایی که شامل لینک‌های رسانه‌ای مانند اسناد، تصاویر و ویدیو باشد، اشاره می‌کند.

REST architecture به ما اجازه می‌دهد تا به صورت پویا لینک‌های hypermedia را در پاسخ‌های خود ایجاد کنیم و در نتیجه باعث تسهیل در ناوبری آسان‌تر شود. برای بیان این موضوع، در مورد یک وب سایت فکر کنید که از هایپر لینک‌ها برای کمک به شما در مسیر یابی به بخش‌های مختلف آن استفاده می‌کند. شما می‌توانید همان اثر را با HATEOAS در REST به دست آورید.

وب سایتی را تصور کنید که صفحه اصلی دارد و شما داخل صفحه اصلی هستید اما داخل صفحه اصلی هیچ لینکی به هیچ کجا وجود ندارد لذا شما برای پیدا کردن مسیر خود در وب سایت دچار مشکل میشوید البته که api مانند یک وب سایت نیست

توانایی کشف api برای خودتان می‌تواند بسیار مفید باشد.

اجازه دهید ببینیم این دقیقاً چگونه کار می‌کند.

ریسپانس عادی به همراه پیاده سازی HATEOAS

اجازه دهید بگوییم که می‌خواهیم برخی مالکان از api را بدست آوریم.

اما چطور میتوانیم این کار را بکنیم ؟

ما حتی نمی‌دونیم چطور به مالکان برسیم ؟ خوب ، اول تنها چیزی که می‌دانیم این است که چگونه درخواست کنیم و این ریشه برنامه است :https://localhost:50001/api

نقطه پایانی ریشه باید بیشتر در مورد API و یا ترجیحاً جایی که شروع به کاوش آن می‌کند، به ما بگوید:

[ { &quothref&quot: &quothttp://localhost:5001/api&quot, &quotrel&quot: &quotself&quot, &quotmethod&quot: &quotGET&quot }, { &quothref&quot: &quothttp://localhost:5001/api/owner&quot, &quotrel&quot: &quotowner&quot, &quotmethod&quot: &quotGET&quot }, { &quothref&quot: &quothttp://localhost:5000/api/owner&quot, &quotrel&quot: &quotcreate_owner&quot, &quotmethod&quot: &quotPOST&quot } ]

بسیار خوب, حالا می‌دانیم چه چیزی برای ما در دسترس است و می‌توانیم به دنبال مالکان فعلی باشیم:http://localhost:5001/api/owner

و در واقع مالکان:

[ { &quotId&quot: &quot24fd81f8-d58a-4bcc-9f35-dc6cd5641906&quot, &quotName&quot: &quotJohn Keen&quot, &quotDateOfBirth&quot: &quot1980-12-05T00:00:00&quot, &quotAddress&quot: &quot61 Wellfield Road&quot, &quotLinks&quot: [ { &quothref&quot: &quothttps://localhost:5001/api/owner/24fd81f8-d58a-4bcc-9f35-dc6cd5641906&quot, &quotrel&quot: &quotself&quot, &quotmethod&quot: &quotGET&quot }, { &quothref&quot: &quothttps://localhost:5001/api/owner/24fd81f8-d58a-4bcc-9f35-dc6cd5641906&quot, &quotrel&quot: &quotdelete_owner&quot, &quotmethod&quot: &quotDELETE&quot }, { &quothref&quot: &quothttps://localhost:5001/api/owner/24fd81f8-d58a-4bcc-9f35-dc6cd5641906&quot, &quotrel&quot: &quotupdate_owner&quot, &quotmethod&quot: &quotPUT&quot } ] }, { &quotId&quot: &quot261e1685-cf26-494c-b17c-3546e65f5620&quot, &quotName&quot: &quotAnna Bosh&quot, &quotDateOfBirth&quot: &quot1974-11-14T00:00:00&quot, &quotAddress&quot: &quot27 Colored Row&quot, &quotLinks&quot: [ { &quothref&quot: &quothttps://localhost:5001/api/owner/261e1685-cf26-494c-b17c-3546e65f5620&quot, &quotrel&quot: &quotself&quot, &quotmethod&quot: &quotGET&quot }, { &quothref&quot: &quothttps://localhost:5001/api/owner/261e1685-cf26-494c-b17c-3546e65f5620&quot, &quotrel&quot: &quotdelete_owner&quot, &quotmethod&quot: &quotDELETE&quot }, { &quothref&quot: &quothttps://localhost:5001/api/owner/261e1685-cf26-494c-b17c-3546e65f5620&quot, &quotrel&quot: &quotupdate_owner&quot, &quotmethod&quot: &quotPUT&quot } ] }, &quot...&quot ]

همانطور که می‌بینید, ما لیستی از مالکان و تمام کارهایی که می‌توانیم روی آن‌ها انجام بدهیم را داریم. و …

بنابراین ، این یک روش خوب برای ساختن یک API قابل کشف و تکامل است.

لینک چیست ؟

با توجه به تعریف RFC5988 لینک "یک اتصال تایپ شده بین دو منبع که توسط شناسه منابع بین المللی (IRIs) شناسایی می شوند" هستش.به بیان ساده ما از پیوندهایی برای پیمایش اینترنت یا بهتر بگوییم منابع موجود در اینترنت استفاده می کنیم.

پاسخ های ما شامل آرایه ای از پیوندها است که براساس چند پراپرتی مطابق RFC تشکیل شده است:

  • href : یک URI هدف را نشان می دهد
  • rel : یک نوع رابطه پیوند را نشان می دهد ، به این معنی که نحوه ارتباط زمینه فعلی با منبع هدف را توصیف می کند
  • method : ما به روش HTTP نیاز داریم تا بدانیم چگونه URI های یکسان را تشخیص دهیم

جوانب مثبت و منفی پیاده سازی HATEOAS

پس تمامی مزیت هایی که میتوانیم در هنگام اجرای HATEOAS انتظار داشته باشیم چیست ؟

HATEOAS برای پیاده سازی به هیچ عنوان ساده نیست اما مزیت هایی که دارد به دشواری آن می ارزد . برخی از این موارد عبارتند از :

  • API قابل کشف و کاوش می شود
  • مشتری می تواند از پیوندها برای پیاده سازی منطق خود استفاده کند ، بسیار آسان تر می شود و هر تغییری که در ساختار API رخ دهد مستقیماً بر روی مشتری منعکس می شود
  • سرور حالت برنامه و ساختار URL را هدایت می کند و برعکس نیست
  • از روابط پیوند می توان برای نشان دادن اسناد توسعه دهنده استفاده کرد
  • ورژن گذاری از طریق پیوندها آسان تر می شود
  • در خواست های نامعتبر کاهش پیدا میکند
  • Api بدون قطع اتصال تمامی کاربران قابلیت تغییر را دارد

ما می توانیم کارهای زیادی با HATEOAS انجام دهیم. اما از آنجا که پیاده سازی همه این ویژگی ها آسان نیست ، باید دامنه API خود را بخاطر بسپاریم و اگر واقعاً به همه این موارد احتیاج داریم. تفاوت زیادی بین یک API عمومی با حجم زیاد و برخی از API های داخلی وجود دارد که برای برقراری ارتباط بین قسمت های همان سیستم مورد نیاز است.

مانند هر چیز دیگری ، زمینه همه چیز است. ساده باش

در حال حاضر این تئوری بیش از حد کافی است. بیایید در قسمت بعد شروع به کار کنیم و ببینیم که اجرای دقیق HATEOAS چگونه است.





منبع : https://code-maze.com/hateoas-aspnet-core-web-api/#preparation

apirestfullasp net coreasp web apiبرنامه نویسی وب
شاید از این پست‌ها خوشتان بیاید