У нас есть база данных ресурсов, будь то продукты, сообщения в блогах или что-то в этом роде. Нам нужно разработать схему URL для их решения для общедоступного веб-сайта.
Вот два примера, которые привязаны к идентификатору базы данных:
Вот пример, который дружелюбен:
(Небольшое представление о моей жизни там просмотра)
Мне нравятся дружественные URL-адреса, поскольку у вас есть представление о том, что находится в конце URL-адреса, когда вы наводите указатель мыши или видите его в электронном письме или документе. Это лучше для SEO, или раньше.
Что происходит, когда документ или продукт переименовывается? Или потому что это изменилось (Wiki может не измениться, но наши ресурсы могли бы) или из-за опечатки, верно? Наши ресурсы очень технические, длинные слова и ошибки.
Также у нас есть идентификатор базы данных, который является числом. Давайте посмотрим на идею для адреса видео с использованием притворного проката магазина:
Идентификатор очевиден и используется при поиске БД. Хорошо.
Бит раздвижных дверей не является уникальным и только генерируется из заголовка видео, его можно проверить по GET, поэтому, если скользящие двери были введены и не соответствуют тому, что на самом деле в документе 287171, они отвечают 404.
Или, может быть, это можно игнорировать, позволяя людям сунуть туда все, что им нравится, если кому-то когда-нибудь захочется. Так что этот URL также будет работать:
Проблема с проверкой дружественной части, как уже упоминалось, является проблемой переименования или исправления опечаток. Если имя изменилось, и в нашем домене это происходит, мы не хотим ломать существующие URL-адреса, поэтому мы должны:
Только не проверяйте дружескую часть.
Проверьте, но добавьте «историю» дружественных частей в запись базы данных, чтобы все предыдущие идентификаторы по-прежнему работали!
Ваши мысли и идеи приветствуются.
Люк
http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids
(с использованием непроверенной версии в свете изменений заголовка, также более короткая ссылка «поделиться» - это просто id:http://programmers.stackexchange.com/q/255684/25768
(и идентификатор пользователя для отслеживания значка)Ответы:
Хранение идентификатора в URL-адресе является наиболее перспективным методом, и, как вы продемонстрировали, URL-адреса все еще могут выглядеть относительно хорошо.
Другим вариантом, используемым несколькими проектами, является сохранение истории ранее использованных слагов. Когда заголовок изменяется, вы обновляете слаг и, если кто-то пытается найти устаревший слаг, ищите в списке старых слагов. Таким образом, старые слагы могут быть повторно использованы для нового контента (или не в зависимости от вашей реализации).
Wordpress сделал это, как и гем friendly_id, который, вероятно, наиболее часто используется для управления дружественными идентификаторами для Rails.
Кроме того, хотя мне нравятся красивые URL, я думаю, что важно помнить, что это, скорее всего, функция, используемая более опытными технически подкованными пользователями. Некоторые браузеры даже начинают скрывать URL-адреса (или их часть).
источник
Я использовал два разных сценария в прошлом.
/id/some-slug
где используется для поиска , слизняка нет. Таким образом, слизняк может быть чем угодно . Но когда слаг не совпадает с реальным слагом, пользователь перенаправляется на текущую версию.id
/permalink
для случаев, когда мы не хотим, чтобы идентификатор в URL или URL никогда не должен меняться, даже если есть доступный идентификатор (см. [1] и [2] ). Конечно, в этом случае используется для поиска . И текущий слаг, и постоянная ссылка (первый слаг) сохраняются в базе данных.permalink
Ни одним из этих способов вам не нужно хранить историю слагов в вашей базе данных, что очень скоро станет проблематичным.
PS: Во втором случае вам понадобится очень специфическая маршрутизация для хранения социальных кредитов:
Смотрите [1] и [2] снова.
источник
HTTP-ответ 301 (перемещен) был разработан для этой цели. Если какой-либо клиент переходит на старый URI, вы просто отправляете ему новый URI, и они могут перенаправить на него.
Если я правильно понимаю, это дублирующая работа, у вас есть и идентификатор имени ресурса, и идентификатор в одном и том же URI. Это не служит никакой цели.
Если вас беспокоит несколько фильмов с одинаковым названием, вы можете добавить дополнительную информацию о фильме в URL
или
Сказав, что нет ничего плохого в использовании идентификаторов, если это имеет смысл для вашей модели данных, особенно если вы группируете только то, что это видео.
Клиент, компьютер или пользователь, не должен в первую очередь полагаться на структуру URI, он должен смотреть на содержимое, которое вы вернули, чтобы выяснить, какой ресурс найти.
Нет ничего плохого в том, чтобы иметь разумную систему URI, которая позволяет кому-то легко угадать местоположение ресурса или перемещаться вверх и вниз по структуре на основе общих свойств (то есть всех фильмов в 2004 году), но ваша система не должна полагаться на этом, и ни один клиент не должен сломаться, если вы измените свои URI
Или, другими словами, вы сможете измениться за ночь с
в
и ни один клиент не должен сломаться, потому что клиенты должны смотреть на контент, а не на URL.
источник
BBC используют слизней, которые:
например, http://www.bbc.co.uk/programmes/b006mk7h
У каждой общедоступной программы есть и идентификатор, и слаг. Идентификаторы могут, как обычно, автоматически увеличивать целые числа, и пропуски не отображаются.
источник
С точки зрения RESTful, URI должны следовать предсказуемой и допускающей иерархической структуре для повышения удобства использования.
Это облегчит их использование потребителями. Если ваши данные имеют отношения, то потребуется какая-то иерархия.
Похоже схема такая:
\video\[name]\[id]
Если имя не используется для какой-либо дальнейшей классификации, оно может быть отклонено в пользу
\video\[id].
Однако, если вы хотите классифицировать видео, тогда, возможно, название будет полезным.
Примеры:
Это действительно дизайнерское решение о том, как моделируется доступ.
источник