Надання зручних URL-адрес для веб-сайту порівняно з реальністю ідентифікаторів бази даних


24

У нас є база даних про ресурси, будь то продукти, повідомлення в блогах чи щось таке. Нам потрібно розробити схему URL-адрес для їх вирішення для загальнодоступного веб-сайту.

Ось два приклади, пов’язані з ідентифікатором бази даних:

Ось приклад, привітний:

(Трохи зазирнути в моє життя перегляду)

Мені подобаються дружні URL-адреси, оскільки ви маєте уявлення про те, що знаходиться в кінці URL-адреси, коли ви наводите курсор або побачите це в електронній пошті чи документі. Краще для SEO, або раніше.

Що відбувається, коли документ або товар перейменовано? Або тому, що він змінився (Wiki може не змінитися, але наші ресурси можуть) або через помилку друку, правда? Наші ресурси дуже технічні, довгі слова та схильність до помилок.

Також у нас є ідентифікатор бази даних, який є номером. Давайте розглянемо ідею адреси відео за допомогою магазину з видом на вигляд:

Ідентифікатор очевидний і використовується в пошуку БД. Чудово.

Біт розсувних дверей не є унікальним і просто генерується з назви відео, його можна було перевірити в GET, тому якщо введені ковзаючі двері і не відповідають тому, що є в документі 287171, він відповідає 404.

А може, це можна ігнорувати, дозволяючи людям вклеювати все, що їм заманеться, якщо хтось коли-небудь дбав про них. Отже, ця URL-адреса також буде працювати:

Як було сказано, питання щодо перевірки дружньої частини - це проблема перейменування чи виправлення помилок. Якщо ім’я змінилося, а в нашому домені це все-таки трапляється, ми не хочемо порушувати URL-адреси, які знаходяться там, тож ми повинні:

  • Тільки не перевіряйте дружню частину.

  • Перевірте, але додайте "історію" дружніх частин до запису бази даних, щоб будь-які попередні дружні ідентифікатори все ще працювали!

Ваші думки та ідеї вітаються.

Лука


11
навіть цей самий сайт використовує комбінацію http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids(використовуючи неперевірену версію з огляду на зміну заголовка; також коротше посилання "поділитися" - це лише ідентифікатор: http://programmers.stackexchange.com/q/255684/25768(і ідентифікатор користувача для відстеження значків)
храповик з виродком

11
Якщо у вас є унікальний ідентифікатор у вашій URL-адресі, я не бачу, чому ви хочете взагалі перевірити частину слизу. Використовуйте його для зовнішнього вигляду і ігноруйте його під час пошуку.
thorsten müller

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


3
Ніколи раніше не знав терміна слимак. Я, мабуть, був під скелею. Геддіт?
Люк Пуплетт

Відповіді:


6

Зберігання ідентифікатора в URL-адресі є найбільш перспективним методом підтвердження, і як ви продемонстрували, URL-адреси все ще можуть виглядати порівняно добре.

Ще один варіант, який використовується декількома проектами, - це зберігати історію раніше використовуваних слимаків. Коли заголовок змінюється, ви оновлюєте слизьку, і якщо хтось намагається шукати застарілий слизький, шукайте у списку старих кульгів. Таким чином старі слизи можна використовувати повторно для нового вмісту (або не залежно від вашої реалізації).

Wordpress зробив це, і так само зробив friendly_id дорогоцінний камінь, який, мабуть, найбільш використовуваний дорогоцінний камінь для управління дружніми ID для Rails.

Крім того, хоча мені подобаються гарні URL-адреси, я думаю, що важливо пам’ятати, що це, швидше за все, функція, яку використовують більш дотепні користувачі. Деякі браузери навіть починають приховувати URL-адреси (або їх частину).


2
Ця історія слимаків - це те, що я розглядав. Опублікувавши запитання, я помітив багато великих іменованих сайтів, на яких слуг, який не перевіряється, ви можете змінити його, щоб сказати що завгодно. amazon.co.uk/Blah-Blah-Blah/dp/B004R276L8 працює. StackExchange розумний, оскільки він «виправляє» і перенаправляє браузер, щоб переконатися, що правильне посилання відображається та надається загальним.
Люк Пуплетт

"Слуг" менш корисний для людей, і більш корисний для оптимізації пошукових систем, оскільки "слизький" або "дружній URL" повинен мати ключові слова, що стосуються вмісту сторінки. Просунуті користувачі не є причиною включення дружніх URL-адрес на ваш сайт. Рейтинги пошукових систем, як правило, є основною причиною.
Грег Бургхардт

Я не погоджуюсь. URL-адреси з лише ідентифікаторами важко працювати; важко запам'ятати зі списку їх, до якого з них ви могли б повернутися. Або чи буде щось недоречне на іншому кінці посилання. Адресна панель Chrome також пропонує будь-яку частину URL-адреси, що є корисним.
Люк Пуплетт

1
@LukePuplett так, я вважаю, що спосіб боротьби з URL-адресами SE є найпростішим, якщо мова йде про слизи.
mbillard

@GregBurghardt єдина відмінність полягає в рейтинг кліків, користувачі , як правило, трохи більше натисніть на дружніх URL - адрес: stackoverflow.com/questions/505793 / ...
mbillard

3

У минулому я використовував два різні сценарії.

  1. /id/some-slugде використовується для пошуку , слимака немає. Таким чином, слизом може бути що завгодно . Але, коли слуг не збігається з фактичним слизом, користувач перенаправляється на поточну версію.id

  2. /permalinkдля випадків, коли ми не хотіли ідентифікатора в URL-адресі або коли URL-адресу ніколи не слід змінювати, навіть якщо є ідентифікатор (див. [1] та [2] ). Звичайно, в цьому випадку використовується для пошуку . Як поточний, так і постійне посилання (перший слизький) зберігаються в базі даних.permalink

Ні в одному з цих способів вам не потрібно зберігати в базі даних історію про смол, що стане проблематичним дуже скоро.


ps: У другому випадку вам потрібна дуже конкретна маршрутизація для збереження соціальних кредитів:

  • якщо ви хочете, перенаправляйте користувачів на поточну URL-адресу (без постійної посилання)
  • Постійне посилання використовується як URL-адреса в соціальних кнопках
  • завжди перенаправляйте сканер facebook на постійну посилання

Дивіться [1] та [2] ще раз.


Чому це буде проблематично? Якщо я збережу, ідентифікатор і куля є що-небудь, відвідувач перейде на фактичну сторінку. Чи буде це шкідливо для SEO?
Jnanaranjan

Ви маєте на увазі збереження історії про слизи? Що ви робите, коли хтось хоче повторно використовувати такого слимака? Для того ж чи іншого ідентифікатора? Як ви створюєте базу даних та / або код для запобігання декількох переадресацій? Ви хочете приховати існування після видалення та перенаправлення, що викривають попереднє існування? Все це не є неможливим, але це викликає всілякі питання, які я швидше просто заважаю дизайном.
Лоде

Що я хотів сказати, це якщо ідентифікатор присутній в URL-адресі, то незалежно від того, який саме слуга буде, він буде переспрямований на потрібну сторінку. Тоді історія слизу не має значення. Я згоден, що для андроїда це проблематично.
Jnanaranjan

1
Ага гаразд. Це те, що я додав сценарій 1 правильно? Або ти маєш на увазі щось інше?
Лоде

Так. Це правильно.
Jnanaranjan

2

Що відбувається, коли документ або товар перейменовано?

HTTP-відповідь 301 (переміщена) була розроблена для цієї мети. Якщо будь-який клієнт переходить до старого URI, ви просто надішліть їм новий URI, і він може перенаправити на це.

Біт розсувних дверей не є унікальним і просто генерується з назви відео, його можна було перевірити в GET, тому якщо введені ковзаючі двері і не відповідають тому, що є в документі 287171, він відповідає 404.

Якщо я правильно дотримуюся цього, це дублювання роботи, у вас є ідентифікатор імені ресурсу, і ідентифікатор в одному URI. Це не служить ніякій меті.

Якщо ви турбуєтесь про те, що кілька фільмів мають однакове ім’я, ви можете додати додаткову інформацію про фільм у URL-адресу

http://vidsyeah.com/video/2000/sliding_doors
http://vidsyeah.com/video/1932/sliding_doors

або

http://vidsyeah.com/video/studios/paramount/sliding_doors
http://vidsyeah.com/video/studios/warnerbros/sliding_doors

Сказавши, що з використанням ідентифікаторів немає нічого поганого, якщо це має сенс для вашої моделі даних, особливо якщо єдине, за чим ви групуєтесь, - це відео.

http://vidsyeah.com/video/210232
http://vidsyeah.com/video/2342

Клієнт, або комп’ютер, або користувач, не повинен в першу чергу надто покладатися на структуру URI, вони повинні дивитись на вміст, який ви повернули, щоб зрозуміти, який ресурс знайти.

Немає нічого поганого в тому, щоб мати розумну систему URI, яка полегшить комусь просто здогадатися про місце розташування ресурсу або перейти вгору та вниз по структурі на основі спільних властивостей (тобто, всі фільми 2004 року), але ваша система не повинна покладатися з цього приводу і жоден клієнт не повинен зламатися, якщо ви зміните URI

Або кажучи іншим способом, ви повинні мати можливість змінюватися протягом ночі з

http://vidsyeah.com/video/studios/paramount/sliding_doors

до

http://vidsyeah.com/video/12323

і жоден клієнт не повинен ламати, оскільки клієнти повинні дивитись на вміст, а не на URL-адреси.


Як і відповідь Джона, я думаю, що ви не носите капелюх UX, коли думаєте про це. Хочу збільшити корисність адреси. Дивіться мій коментар у запитанні: "Мені подобаються дружні URL-адреси, оскільки ви маєте уявлення про те, що знаходиться в кінці URL-адреси, коли ви наводите курсор чи побачите це в електронній пошті чи документі. Це краще для SEO, або раніше".
Люк Пуплетт

2
Для того, щоб кинути 301, мені потрібно було б знайти правильний ресурс, тому мені знадобиться історія.
Люк Пуплетт

1
Вам знадобиться історія, але якщо у вас є сайт з ресурсами, які змінюються, це все-таки хороша ідея.
Кормак Малхолл

З дружніми URI немає проблем. Я б не робив схему, згідно з якою URI може бути чим завгодно, але все одно працює, якщо в кінці є ідентифікатор. Це насправді не вирішує жодну проблему (користувач все ще повинен пам’ятати ідентифікатор) і вводить заплутану схему URI (користувач може законно запитати, чому два різних URI, один з орфографічною помилкою, йдуть на один і той же ресурс)
Cormac Mulhall

1
Якщо вас турбують правописні помилки в URI, поширеним способом вирішення цього питання пропонується URI на сторінці помилки 404 для неправильно написаної URL-адреси. Ви можете здійснити пошук шаблону слів і повернути те, що, на вашу думку, може шукати користувач.
Cormac Mulhall

1

BBC використовують смоли, які є:

  • альфа-числовий (для компактності)
  • унікальний (для пошуку)
  • не послідовний (щоб речі порядку були додані в db не піддавалися)

наприклад, http://www.bbc.co.uk/programmes/b006mk7h

Кожна публічна програма має як ідентифікатор, так і кулі. Потім ідентифікатори можуть автоматично збільшувати цілі числа, як зазвичай, і пропуски не піддаються.


0

З точки зору RESTful, URI повинні дотримуватися передбачуваної та впорядкованої ієрархічної структури для підвищення зручності використання.

Це полегшить користування споживачами. Якщо у ваших даних є зв’язки, то була б необхідна якась ієрархія.

Схоже, схема така: \video\[name]\[id]

Якщо назва не використовується для подальшої класифікації, це може бути відхилено на користь \video\[id].

Однак, якщо ви хочете класифікувати відео, то, можливо, ім'я корисне.

Приклади:

  • \ video \ SwingingDoors \ 123
  • \ video \ SwingingDoors \ 124
  • \ video \ SlidingDoors \ 125
  • \ video \ SlidingDoors \ 126

Це дійсно дизайнерське рішення щодо моделювання доступу.


Думаю, ви думаєте про це з архіву архітектури API / веб-сайту PoV. Я хотів запровадити створену дружню частину URL-адреси, яка допоможе людям та SEO. Мабуть, це звичайна річ і походить під назвою "слимак". Назва не використовується для класифікації та додається (не випадає), щоб покращити UX з URL-адресою та нашим сайтом / брендом.
Люк Пуплетт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.