Pull to refresh

Comments 8

Почему бы тогда не оставить лишь урлы вида https://domain.test/3f0fd552-e564-42ed-86b6-a8e3055e2763 и не парить ни клиента, ни сервера редиректами, разными типами ссылок, сменой формата ссылок и прочей ерундой? Получили гуид, нашли запись в базе, узнали её тип, вызвали нужный обработчик.

Это хороший вариант, но требует дополнительного обращения к БД при обработке каждого запроса для получения реального адреса по его GUID. И не очень удобен при анализе HTTP-логов для разработки, отладки или поддержки.
Это уже реальный адрес, просто лезете в базу и достаёте запись по этому гуиду… там же можете и в логи писать.
В реляционной БД для этого придется держать отдельную таблицу со всеми GUID'ами сущностей?
Тут опять же накладывается ограничение на структуру адреса, которую потом нельзя будет изменить.
В реляционной БД для этого придется держать отдельную таблицу со всеми GUID'ами сущностей?

Или сменить субд, на графовую.


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

И зачем его менять? Там только гуид и всё.

Более того, структура URL-ов может измениться без ведома клиента, HATEOAS это позволяет

Не совсем. В REST (уровнем ниже) URL не может поменяться когда разработчику захотелось. Время жизни URL совпадает со временем жизни ресурса. Если вы пошли смотреть книжку, а URL вернул 404, значит книжки больше нет (семантически). Не сервер ушел, не разработчик передумал, а книжка — пффф — и исчезла. Ссылка отражает состояние и наоборот. Объяснить клиенту что "ну ты на URL не смотри, вообще-то ничего не поменялось" в рамках принципов REST нельзя никак.


Ну как же! А может редирект вернуть? Можно, но не стоит. Формально семантика редиректа — "мы переехали". Это костыль уровня протокола. Который, кстати, уже много раз засовывали куда не следует вроде авторизации и трекинга. Предполагаемое поведение клиента — повторить запрос по новому адресу и все. Для браузера это норм (у него время жизни страницы ограничено чем-то разумным), а вот для API — не годится: что клиенту дальше делать с ответом (в котором могут быть ссылки на другие ресурсы) — вообще говоря не определено. Например — автор редиректнутой книжки — это тот же самый автор или другой? Адрес другой, значит и автор другой? Или автор тот же самый, потому что адреса совпали с точностью до суффикса? Давайте разбирать URL и искать в нем уникальные идентификаторы на клиенте? Или вытащим ресурс "автор" и посмотрим на контент? Нет.


А как быть если мы накосячили, или внезапно решили что схема URL больше не отражает прекрасное? На этот случай в HATEOAS есть целое метафизическое болото про версионирование — приятного чтения, дружок, надеюсь тебе нравятся шутки про "ложки нет, а суслик есть".


TLDR: "постоянные ссылки которые могут измениться" могут измениться только через изменение версии схемы URL, а это решается версиями.

Sign up to leave a comment.

Articles