Как стать автором
Обновить

Комментарии 26

Автор оригинала вольно распорядился возрастом интернета — его история началась в 1969 году, а совсем не в 1994.

Автор перевода вольно распорядился оригиналом: REST is almost as old as the web

но ведь так и написано — что рест почти столько же лет, сколько и инернету — смысл точно такой же

а, справедливо, да

Спасибо, поправили!

Ответ: Потому, что ценности "Отсутствие сохранения состояния" и "Самодокументируемые сообщения" перестали быть вариантом и всё развалилось как карточный домик.

Приведите, пож, пример когда без сохранения состояния не обойтись. Если не сложно, конечно. В двух словах.

По мне так, если у приложения есть база данных, изменяемая через API этого же приложения, то у вас уже есть состояние.

Тут другое имеется в ввиду.

Нет состояния на сервере тут = клиент передаёт всю необходимую информацию для того, чтобы сервер ответил в рамках одного.

Если у тебя в бд хранится какой-то ресурс, который может меняться, но доступен по одному запросу - состояния на сервере нет.

Состояние появляется, когда на сервере нужно сохранить некий ключ перед получением этого ресура (например id пользователя) - запросы становятся зависимыми, появляется состояние (до первого запроса / после первого запроса)

Правда работать с авторизацией без состояния и секьюрно кажется довольно тяжело

Правда работать с авторизацией без состояния и секьюрно кажется довольно тяжело

А разве JWT-токены не призваны решить эту проблему? Она решается тем, что:

  • токен подписан и проверка его валидности + срока годности достаточно для доверительных отношений

  • в токен вшиты обычно все необходимые данные для авторизации действий

  • токен не нужно никуда "персистить". максимум - передать дальше по цепочке вызовов

Так суть не в том, что не обойтись, а в том, что игра не стоит свеч. Для тяжёлых динамических сервисов гораздо практичнее развернуть тяжёлый сессионный стейт и дропнуть его по окончании сессии со всеми ресурсами, а всё многоступенчатые запросы HATEOAS свернуть в примитивные, но локальные. Альтернатива - куки, но они тоже в немилости.
Еще раз, беда не в том, что кто-то действительно "не понимает рест", а в том, что люди осознанно его обходят. Как пример: Люди придумали GraphQL как способ взаимодействия для некоторых сценариев, но я уверен, что будут пользоваться химерой) И не потому, что "не понимают GraphQL" или что-то "нельзя выразить в GraphQL", а потому, что это неудобно и непрактично для некоторых кейсов.

НЛО прилетело и опубликовало эту надпись здесь
Периодически в сети появляются наполненные внезапными открытиями статьи в стиле «Вы все неправильно понимаете ООП», где нам расскажут про Алана Кэя и его идеи 70-х годов, как будто эти идеи не имеют права на эволюцию, как будто это незыблемый закон природы, а современные программисты кощунственно извратив основы ввергают индустрию в пучину разврата, и просто необходимо канонизировать Кэя и отрубать руки за вольные трактровки его священных речей.
Это технология, она проходит проверку временем или не проходит. Полезные идеи приживаются, терминология меняется, подходы меняются. Да сам автор тогда в 90-х вряд-ли мог вообразить во что вревратится интернет в 2020-х.
Вот эта статья, мне кажется, в подобной же риторике написана. «Вы не правильно используете». Да идите вы к чёрту, господа, как надо, так и используем.

Хорошо сказано

Вот да

Иии? А что, кто-то считает как-то иначе? Как именно иначе?

Практически все, кто использует этот термин тут на Хабре, да и не только на Хабре.

Даже в комментариях под этой статьёй уже были люди, считающие что оригинальный REST имеет какое-то отношение к http-методам(get/post и пр.), хотя это не так.

Полно сервисов в интернете, которые называют свою апишку "REST"/"RESTful", но вместо реализации HATEOAS имеют спецификацию типов полей/ответов, под которую пишутся/генерируются клиенты.

Оригинальный REST по сути ближе всего к тому, как классический веб с его HTML-страничками, переходами и формами работает. Чтобы сделать сайт в простом случае, нам не нужно писать документацию/спецификацию API, вместо этого мы просто описываем наши страницы и переходы между ними через гипертекст и гиперссылки, а браузер выступает универсальным REST клиентом. И это называется HATEOAS.

p.s. Ну и да, REST Филдинга сейчас навряд ли актуален для изучения. Это просто термин который часто используют по назначению

но вместо реализации HATEOAS имеют спецификацию типов полей/ответов, под которую пишутся/генерируются клиенты.

Оригинальный REST по сути ближе всего к тому, как классический веб с его HTML-страничками, переходами и формами работает.

А как по вашему браузер понимает как правильно показывать странички, как рисовать формы и отправлять их на сервер?

Он делает это как раз за счёт "типа документа" + "спецификации для этого типа". Первое передаётся в заголовке Content-Type (в случае HTTP), а второе содержит описание того какие "поля" могут быть в документе этого типа и что с ними надо делать клиенту (или серверу).

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

Но я согласен, что в большинстве случаев мало кто использует разные "типы" документов. Обычно делают один, например application/json, а как именно обрабатывать данные с таким типом в клиенте - определяют на основе каких-то зашитых в клиенте эвристик. Наверное более правильно было бы использовать разные типы данных для реально разных ресурсов. Например application/product+json, application/order+json. Но как правило это не используют, т.к., в отличии от браузера, у самописного клиента несколько больше состояний. В зависимости от текущего состояния, клиент определяет каким образом ему обрабатывать получнный от сервера application/json.

Зашитые в клиент "эвристики", вместо повсеместного использования HATEOAS, могут компенсироваться использованием REST принципа "code-on-demand". Оно позволит обновлять и дополнять код клиента, что бы он мог корректно работать после каких-то изменений на сервере.

Современные "App Store" в мобилках и десктопах - это фактически этот самый code-on-demand. Только с ними есть "проблема" - пользователи могут отключить автоматическое обновление. И если это критично для приложения, тогда надо более широко использовать HATEOAS (и даже code-on-demand) внутри самого клиента. Тогда он сможет лучше работать в условиях изменения приложения на стороне сервера. В этом плане веб-браузеры - это наиболее гибкие клиенты для распределённых клиент-серверных приложений, которые у нас сейчас имеются.

Оригинальный REST по сути ближе всего к тому, как классический веб с его HTML-страничками, переходами и формами работает. [...] описываем наши страницы и переходы между ними через гипертекст и гиперссылки, а браузер выступает универсальным REST клиентом.

REST Филдинга сейчас навряд ли актуален для изучения

Вот абсолютно согласен с этими утверждениями.

А из статьи непонятно, к какому выводу ведёт автор.

Вот абсолютно согласен с этими утверждениями.

А из статьи непонятно, к какому выводу ведёт автор.

Как по мне, основной смысл таких набросов про rest/ооп/agile etc. в том, чтобы людей подтолкнуть к более осознанному выбору подходов.

Часто за подобными баззвордами оказывается карго культ проталкиваемый не очень честными консультантами

Идея RESTful в теории звучала отлично с самого начала, только вот применительно к интернету - оказалась слишком сложна в реализации.

Браузеры договорились и внедрили методы отличные от get/post только ближе к ie7 и opera8, а это дай бог памяти годы 2008-2009? До этого момента развлекались post-методами с дополнительным полем _method=delete. Тот же html 4 поддерживал отправку форм только двумя основными методами. Так и прижилось)

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Ну, это ведь передача, а не сохранение)

Короче говора оригинальный REST не кому не был нужен или сложно реализуем... за то идея да понравилась... тоже самое говорит и про OOP

Все оказалось... зря... Ждем от автора акуальных реализаций rest. Да что там, и crud и тот видимо не тот (тоРт)? "Критикуешь, - предлагай. Предлагаешь, - действуй. Действуешь, - отвечай!"(с) А пока все работает. И поверхностных знаний и суждений явно недостаточно для модернизации существующих систем, ахитектур, паттернов и т.д.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий