**ابررسانه به عنوان موتور حالت برنامه کاربردی** (**HATEOAS**) جزئی از معماری برنامه REST است که آن را از دیگر معماریهای کاربرد شبکه متمایز می‌کند.

به کمک HATEOAS، یک کلاینت می‌تواند با یک نرم‌افزار شبکه تعامل کند به صورتی که سرورهای برنامه این نرم‌افزار اطلاعات را به صورت پویا از طریق ابررسانه ارائه نمایند. یک کلاینتREST، جهت تعامل با سرور یا برنامه نیاز کم یا حتی هیچ نیازی به دانش قبلی ندارد و تنها کافی است درک عمومی از مفهوم ابررسانه داشته باشد.

در نقطه مقابل، کلاینتها و سرورهای موجود در CORBA از طریق یک رابط ثابت که ازطریق اسناد یا یک زبان توصیف رابط (IDL) به اشتراک گذاشته می‌شوند، تعامل دارند.

محدودیت‌هایی که توسط HATEOAS اعمال می‌گردد، منجر به جدا شدن کلاینت و سرور می‌شود. این ویژگی عملکرد سرور را قادر می‌سازد تا به طور مستقل تکامل یابد.

مثال
----

یک مشتری REST از طریق یک URL ثابت ساده وارد یک برنامه REST می‌شود. کلیه اقدامات آتی که مشتری ممکن است انجام دهد، در بازنمودهای منبع از سرور بازگردانده می‌شود. انواع رسانه ای که برای این نمایش‌ها استفاده می‌شوند و روابط پیوندی که ممکن است در آن وجود داشته باشد، به‌صورت استاندارد هستند. کلاینت با انتخاب از پیوندهای موجود در یک بازنمود یا با دستکاری بازنمود به روشهایی که در نوع رسانه ارائه شده‌است، در برنامه پیمایش می‌کند. به این ترتیب، تعامل RESTful به جای استفاده از اطلاعات خارج از کانال ارتباط، توسط ابررسانه هدایت می‌شود.

به عنوان مثال، این درخواست GET یک منبع حساب را واکشی می‌کند، و درخواست ارائه جزئیات را در قالب یک بازنمود به شکل JSON می‌کند: 

```
GET /accounts/12345 HTTP/1.1
Host: bank.example.com
Accept: application/vnd.acme.account+json
...

```
 پاسخ این است: 

```
HTTP/1.1 200 OK
Content-Type: application/vnd.acme.account+json
Content-Length: ...

{
 "account": {
 "account\_number": 12345,
 "balance": {
 "currency": "usd",
 "value": 100.00
 },
 "links": {
 "deposit": "/accounts/12345/deposit",
 "withdraw": "/accounts/12345/withdraw",
 "transfer": "/accounts/12345/transfer",
 "close": "/accounts/12345/close"
 }
 }
}

```
 پاسخ شامل این پیوندهای پیگیری احتمالی است: واریز، برداشت ، انتقال یا بستن حساب.

هنگامی که اطلاعات حساب بعداً بازیابی شد، حساب خالی می‌شود: 

```
HTTP/1.1 200 OK
Content-Type: application/vnd.acme.account+json
Content-Length: ...

{
 "account": {
 "account\_number": 12345,
 "balance": {
 "currency": "usd",
 "value": -25.00
 },
 "links": {
 "deposit": "/accounts/12345/deposit"
 }
 }
}

```
 اکنون فقط یک پیوند در دسترس است: واریز پول. در *حالت* فعلی، پیوندهای دیگر در دسترس نیست. این مفهوم موتور حالت برنامه کاربردی است. با توجه به حالتهای متفاوت منابع، عملیات متفاوتی امکان‌پذیر هستند.

کلاینت لازم نیست هر نوع رسانه و مکانیزم ارتباطی ارائه شده توسط سرور را درک کند. امکان درک انواع رسانه‌های جدید را می‌توان در زمان اجرا از طریق "کد بر اساس تقاضا "توسط سرور به کلاینت ارائه داد.

سرچشمه‌ها
---------

محدودیت HATEOAS یک بخش اساسی از ویژگی «رابط یکسان» REST است، همان‌طور که در پایان‌نامه دکترای روی فیلدینگ تعریف شده‌است. فیلدینگ در ادامه این مفهوم را در وبلاگ خود توضیح داده‌است.

فیلدینگ توضیح می‌دهد که هدف برخی از این سخت‌گیری‌ها و سایر محدودیت‌های REST، "طراحی نرم‌افزار در مقیاس دهه‌ها است: هر جزئیاتی برای ارتقاء طول عمر نرم‌افزار و تکامل مستقل طراحی شده‌است. بسیاری از محدودیت‌ها مستقیماً با راندمان کوتاه مدت مخالف هستند. متأسفانه، مردم در طراحی کوتاه مدت نسبتاً خوب هستند و معمولاً در طراحی بلند مدت افتضاح هستند. "

جستارهای وابسته
---------------

* زبان برنامه نویسی ابرمتنی
* شرح، کشف و یکپارچه سازی جهانی (UDDI) معادل زبان توصیف خدمات وب (WSDL) است.

منابع
-----

1. 1 2 3  Fielding, Roy T. (20 Oct 2008). "REST APIs must be hypertext-driven". Retrieved 20 May 2010.
2. ↑  Thijssen, Joshua (2016-10-29). "What is HATEOAS and why is it important for my REST API?". *REST CookBook*. Retrieved 2020-02-05.