Я много читал о потенциальных преимуществах, если мне нужно было преобразовать мои существующие Restful веб-сервисы как можно более подходящие для HATEOS. Я понимаю важность предоставления ссылок в полезной нагрузке, чтобы снизить потребительскую нагрузку при запоминании следующих действительных доступных действий. Тем не менее, я не могу представить себе, как это поможет потребителю моих Restful веб-сервисов на самом деле.
Чтобы проиллюстрировать это, я беру этот пример из книги Rest In Practice о заказе кофе: -
<order xmlns="http://schemas.restbucks.com">
<location>takeAway</location>
<item>
<name>latte</name>
<quantity>1</quantity>
<milk>whole</milk>
<size>small</size>
</item>
<cost>2.0</cost>
<status>payment-expected</status>
<link rel="payment" href="#" onclick="location.href='https://restbucks.com/payment/1234'; return false;" />
</order>
В принципе, это позволяет потребителю произвести платеж, определенный тегом <link>
. Однако на самом деле потребителю по-прежнему необходимо знать всю семантику вызова этой веб-службы, например, какой метод (POST или PUT) использовать, какие параметры запроса использовать в полезной нагрузке для осуществления платежа и т.д... в другом слове, потребитель все еще должен полагаться на документацию WADL, чтобы знать, как сделать этот веб-сервис успешным. Эти теги, вероятно, имеют больше смысла, если все они используют GET на одном конкретном элементе. В противном случае, я действительно не вижу больших преимуществ при определении ссылок здесь... кроме того, что потребитель знает, какие действия они могут вызывать дальше, а затем ссылается на WADL, чтобы определить, как правильно его вызывать.
Моя следующая забота - это возможность получить очень тяжелую полезную нагрузку со всеми тегами <link>
. Например, если GET on/projects/1/users возвращает всю информацию пользователя, относящуюся к проекту 1, я предполагаю, что у меня появятся следующие теги: -
<project>
<users>
<user id="12" name="mike" ... />
<user id="23" name="kurt" ... />
<user id="65" name="corey" ... />
</user>
<links>
<link rel="self" href="#" onclick="location.href='http://server/projects/1/users'; return false;"/>
<link rel="create_user" href="#" onclick="location.href='http://server/projects/1/users'; return false;"/>
<link rel="get_user_mike" href="#" onclick="location.href='http://server/projects/1/users/12'; return false;"/>
<link rel="get_user_kurt" href="#" onclick="location.href='http://server/projects/1/users/23'; return false;"/>
<link rel="get_user_corey" href="#" onclick="location.href='http://server/projects/1/users/65'; return false;"/>
...
</links>
</project>
Если в проекте говорится, что у 500 пользователей... не было бы 500 пользовательских ссылок в полезной нагрузке? В противном случае, каков наилучший подход при перепроектировании моих веб-сервисов для решения этой ситуации? Или это приемлемо в реальном мире?
Любые мысли или предложения здесь очень ценятся. Спасибо.