Может кто-нибудь объяснить "Hypertext как двигатель состояния приложения" в простых выражениях

Кажется, что это руководитель REST, с которым я столкнулся сильнее всего. Я понимаю, что при планировании отдыха api большая часть усилий должна идти на проектирование/описание гипертекста для приложения. Любые указатели на реальные приложения этого принципа? Как применяется атомный протокол этого принципа? Может кто-нибудь объяснить, что в простых терминах, как можно было бы применить это к гипотетической корзине покупок api.

Ответ 1

Подумайте о том, как вы переходите на обычный веб-сайт. Когда вы посещаете, вы читаете содержимое страниц и, основываясь на том, что вы прочитали и что хотите, вы просматриваете различные ссылки на странице. Это действительно ядро ​​того, что "гипертекст как двигатель состояния приложения" сводится к минимуму. В этом примере состояние приложения - это состояние в вашей голове и страница, на которой вы находитесь. Исходя из этого, вы переходите к дальнейшим ссылкам, что изменяет состояние приложения в вашей голове.

Там есть еще один элемент: разум: другая сторона заключается в том, что вам не нужно угадывать эти URI: на странице должно быть достаточно контекста, чтобы выводить URI (например, информацию, которую приложение будет иметь типа контента и таких вещей, как шаблон URI) или URI, которые должны следовать, должны присутствовать. Кроме того, HTTP-приложение RESTful не должно заботиться о структуре URI.

ОБНОВЛЕНИЕ:. Чтобы расширить контекст, HTML-формы также демонстрируют HATEOAS. Формы, использующие GET, аналогичны шаблонам URI. И HATEOS не ограничивается просто перемещением ссылок с использованием HTTP GET: формы, использующие POST (или какой-либо другой метод, если браузер просто поддерживает его) могут быть, хотя и описывать представление для отправки на сервер.

Ответ 2

При попытке объяснить гипермедиа, я хотел бы использовать пример навигации в автомобиле через указатели против карты. Я понимаю, что он прямо не отвечает на ваш вопрос, но может помочь.

При управлении автомобилем и вы достигаете определенного перекрестка, вам предоставляются указатели, указывающие, где вы можете перейти с этой точки. Аналогично, гипермедиа предоставляет вам набор опций, основанных на вашем текущем состоянии.

Традиционный API на основе RPC больше похож на карту. С картой вы планируете планировать свой маршрут на основе статического набора данных о дорогах. Одна из проблем с картами заключается в том, что они могут устареть и не предоставляют никакой информации о трафике или других динамических факторах.

Преимущество указателей заключается в том, что их можно менять "на лету", чтобы объединить трафик из-за строительства или управлять потоком трафика.

Я не предлагаю, чтобы указатели всегда были лучшим вариантом, чем карта. Очевидно, есть плюсы и минусы, но важно знать оба варианта. То же самое происходит и с гипермедией. Это ценная альтернатива традиционному интерфейсу RPC.

Ответ 4

Другой способ взглянуть на эту концепцию состоит в том, что состояние представлено текущей страницей и ссылками, встроенными в нее. Перемещение ссылки изменяет состояние приложения, которое представлено следующей страницей. Немного трудно объяснить... ссылки, которые доступны в любой момент времени, определяют, какие действия доступны на основе действий, которые уже произошли. Это одно определение "текущего состояния".

Трюк состоит в том, чтобы представлять доступные действия - это URI, которые "действуют" на ресурс. Получение представления, связанного с URI, неявно выполняет действие и возвращает полученное представление. URI встроены в представление, и пользователь понимает действие, связанное с определенным URI. Различные методы HTTP помогают определить "действия", которые происходят, и указывает, когда действие не разрешено. Обычно это то, что люди получают при описании всей парадигмы RESTful.