Bereitstellung benutzerfreundlicher URLs für eine Website im Vergleich zur Realität der Datenbank-IDs

24

Wir haben eine Datenbank mit Ressourcen, seien es Produkte, Blogposts oder ähnliches. Wir müssen ein URL-Schema für die öffentliche Website entwerfen, um sie zu adressieren.

Hier sind zwei Beispiele, die an die Datenbank-ID gebunden sind:

Hier ist ein freundliches Beispiel:

(Ein kleiner Einblick in mein Browsen dort)

Ich mag die benutzerfreundlichen URLs, da Sie eine Vorstellung davon haben, was am Ende der URL steht, wenn Sie den Mauszeiger darüber halten oder es in einer E-Mail oder einem Dokument sehen. Es ist besser für SEO, oder früher.

Was passiert, wenn das Dokument oder Produkt umbenannt wird? Entweder weil es sich geändert hat (Wiki kann sich nicht ändern, aber unsere Ressourcen könnten sich ändern) oder wegen eines Tippfehlers, oder? Unsere Ressourcen sind sehr technisch, lang und fehleranfällig.

Wir haben auch eine Datenbank-ID, die eine Nummer ist. Sehen wir uns eine Idee für eine Adresse eines Videos an, das einen Leih-Laden verwendet:

Die ID ist offensichtlich und wird in der DB-Suche verwendet. Fein.

Das Schiebetür-Bit ist nicht eindeutig und wird nur aus dem Videotitel generiert. Es kann auf GET überprüft werden. Wenn also Schiebetüren eingegeben wurden und nicht mit den Angaben in Dokument 287171 übereinstimmen, antwortet es 404.

Oder vielleicht könnte es ignoriert werden und es den Menschen ermöglichen, sich dort aufzuhalten, was immer sie wollen, wenn es jemand interessiert. Diese URL würde also auch funktionieren:

Das Problem bei der Überprüfung des freundlichen Teils ist, wie erwähnt, das Problem des Umbenennens oder der Tippfehlerbehebung. Wenn sich der Name ändert und dies in unserer Domain passiert, möchten wir die URLs, die dort draußen sind, nicht auflösen. Deshalb sollten wir:

  • Nur nicht den freundlichen Teil überprüfen.

  • Überprüfen Sie, aber fügen Sie dem Datenbankdatensatz eine 'Historie' von benutzerfreundlichen Teilen hinzu, damit alle vorherigen benutzerfreundlichen IDs weiterhin funktionieren!

Ihre Gedanken und Ideen sind willkommen.

Luke

Luke Puplett
quelle
11
Selbst auf dieser Website wird eine Kombination verwendet http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids(bei Verwendung einer nicht verifizierten Version im Hinblick auf Titeländerungen ist auch der kürzere "Teilen" -Link nur die ID: http://programmers.stackexchange.com/q/255684/25768(und die Benutzer-ID für die Abzeichenverfolgung)
Ratschenfreak
11
Wenn Ihre URL eine eindeutige ID enthält, kann ich nicht nachvollziehen, warum Sie den Slug-Teil überhaupt verifizieren möchten. Verwenden Sie es für die Looks und ignorieren Sie es für die Lookups.
Thorsten Müller
Wenn einer von euch eine richtige Antwort geben möchte, werde ich abstimmen, damit ihr die Punkte bekommt. Ich lasse die Stimmen ein und werde die Antwort in ein paar Tagen an die am meisten gestimmten vergeben.
Luke Puplett
3
Ich kannte den Begriff Schnecke noch nie. Ich muss unter einem Felsen gewesen sein. Kapiert?
Luke Puplett

Antworten:

6

Die ID in der URL zu belassen ist die zukunftssicherste Methode, und wie Sie gezeigt haben, können die URLs immer noch relativ gut aussehen.

Eine weitere Option, die von mehreren Projekten verwendet wird, besteht darin, einen Verlauf der zuvor verwendeten Butzen zu führen. Wenn sich der Titel ändert, aktualisieren Sie die Schnecke. Wenn jemand versucht, nach einer veralteten Schnecke zu suchen, durchsuchen Sie die Liste der alten Schnecken. Auf diese Weise können alte Slugs für neue Inhalte wiederverwendet werden (oder unabhängig von Ihrer Implementierung).

Wordpress hat das getan, ebenso wie der friendly_id-Edelstein, der wahrscheinlich der am häufigsten verwendete Edelstein für die Verwaltung von Friendly-IDs für Rails ist.

Auch wenn ich gut aussehende URLs mag, denke ich, dass es wichtig ist, sich daran zu erinnern, dass dies höchstwahrscheinlich eine Funktion ist, die von technisch versierten Benutzern verwendet wird. Einige Browser fangen sogar an, URLs (oder einen Teil davon) auszublenden.

mbillard
quelle
2
Diese Schneckengeschichte ist das, worüber ich nachgedacht habe. Seit dem Posten der Frage sind mir viele Websites mit großen Namen aufgefallen, die einen nicht überprüften Slug haben. Sie können ihn so ändern, dass er etwas aussagt. amazon.de/Blah-Blah-Blah/dp/B004R276L8 funktioniert. StackExchange ist clever, da es den Browser "korrigiert" und umleitet, um sicherzustellen, dass der richtige Link angezeigt und geteilt wird.
Luke Puplett
Ein "Slug" ist für Personen weniger nützlich und für die Suchmaschinenoptimierung nützlicher, da ein "Slug" oder eine "freundliche URL" Schlüsselwörter enthalten sollte, die sich auf den Inhalt der Seite beziehen. Fortgeschrittene Benutzer sind nicht der Grund, freundliche URLs in Ihre Website aufzunehmen. Suchmaschinen-Rankings sind in der Regel der Hauptgrund.
Greg Burghardt
Ich stimme dir nicht zu. URLs mit nur IDs sind schwer zu bearbeiten. Es ist schwer, sich aus einer Liste von ihnen zu merken, zu welcher Sie zurückkehren möchten. Oder ob es am anderen Ende des Links etwas Unangemessenes geben wird. In der Adressleiste von Chrome wird auch ein Teil der URL angezeigt, was nützlich ist.
Luke Puplett
1
@LukePuplett Ja, ich glaube, SEs Umgang mit URLs ist am einfachsten, wenn es um Slugs geht.
mbillard
@ GregBurghardt der einzige Unterschied ist in der Klickrate, Nutzer neigen dazu, auf freundliche URLs etwas mehr zu klicken: stackoverflow.com/questions/505793/…
mbillard
3

Ich habe in der Vergangenheit zwei verschiedene Szenarien verwendet.

  1. /id/some-slugwo das idnachgeschlagen wird , die Schnecke nicht. Somit kann die Schnecke alles sein . Wenn der Slug jedoch nicht mit dem tatsächlichen Slug übereinstimmt, wird der Benutzer zur aktuellen Version umgeleitet.

  2. /permalinkfür Fälle, in denen wir keine ID in der URL haben wollten oder in denen sich die URL niemals ändern sollte, obwohl eine ID verfügbar ist (siehe [1] und [2] ). Natürlich, in diesem Fall die permalinkfür die Suche verwendet . Sowohl der aktuelle Slug als auch der Permalink (der erste Slug) werden in der Datenbank gespeichert.

Auf keine dieser Arten müssen Sie einen Verlauf von Schnecken in Ihrer Datenbank führen, was sehr bald problematisch werden würde.


ps: Im zweiten Fall brauchst du ein bestimmtes Routing, um Sozialkredite zu erhalten:

  • Wenn Sie möchten, leiten Sie Benutzer auf die aktuelle (nicht permalinkfähige) URL um
  • lass den permalink als url in den social buttons verwenden
  • Leiten Sie den Facebook-Crawler immer auf den Permalink um

Siehe noch einmal [1] und [2] .

Ader
quelle
Warum wird es problematisch sein? Wenn ich behalte und ID und Slug irgendetwas ist, wird der Besucher auf die eigentliche Seite gehen. Wird es für SEO schädlich sein?
Jnanaranjan
Du meinst, eine Geschichte von Schnecken zu führen? Was machen Sie, wenn jemand eine solche Schnecke wiederverwenden möchte? Für die gleiche oder eine andere ID? Wie entwerfen Sie eine Datenbank und / oder einen Code, um Mehrfachumleitungen zu verhindern? Möchten Sie das Vorhandensein nach dem Löschen verbergen und werden Umleitungen verwendet, um das vorherige Vorhandensein anzuzeigen? All dies ist nicht unmöglich, wirft aber alle möglichen Fragen auf, die ich eher einfach so verhindere.
Lode
Was ich sagen wollte, ist, wenn die ID in der URL vorhanden ist, dann, egal was der Slug ist, wird es auf die angeforderte Seite umgeleitet. Dann spielt die Schneckengeschichte keine Rolle. Ich bin damit einverstanden, dass es für Android jedoch problematisch ist.
Jnanaranjan,
1
Ah okay. Das ist, was ich ein Szenario 1 hinzugefügt habe, oder? Oder meinst du etwas anderes?
Lode
Ja. Das ist richtig.
Jnanaranjan
2

Was passiert, wenn das Dokument oder Produkt umbenannt wird?

Zu diesem Zweck wurde die HTTP-Antwort 301 (Verschoben) erstellt. Wenn ein Client zur alten URI wechselt, senden Sie ihm einfach die neue URI und er kann zu dieser umleiten.

Das Schiebetür-Bit ist nicht eindeutig und wird nur aus dem Videotitel generiert. Es kann auf GET überprüft werden. Wenn also Schiebetüren eingegeben wurden und nicht mit den Angaben in Dokument 287171 übereinstimmen, antwortet es 404.

Wenn ich richtig verfolge, ist dies eine Duplizierungsarbeit. Sie haben sowohl eine Namenskennung für die Ressource als auch eine ID in derselben URI. Das hat keinen Zweck.

Wenn Sie Bedenken haben, dass mehrere Filme denselben Namen haben, können Sie der URL zusätzliche Informationen zum Film hinzufügen

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

oder

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

Allerdings ist die Verwendung von IDs nicht verkehrt, wenn dies für Ihr Datenmodell sinnvoll ist, insbesondere, wenn Sie nur nach Videos gruppieren.

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

Der Client, entweder ein Computer oder ein menschlicher Benutzer, sollte sich nicht zu sehr auf die URI-Struktur verlassen, sondern sich den zurückgegebenen Inhalt ansehen, um herauszufinden, welche Ressource zu finden ist.

An einem vernünftigen URI-System, das es einem leicht macht, einen Standort einer Ressource zu erraten oder auf der Grundlage gemeinsamer Eigenschaften (dh aller Filme im Jahr 2004) in der Struktur nach oben und unten zu navigieren, ist nichts auszusetzen. Ihr System sollte sich jedoch nicht darauf verlassen auf das und kein Client sollte brechen, wenn Sie Ihre URIs ändern

Oder anders ausgedrückt, Sie sollten in der Lage sein, über Nacht von zu wechseln

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

zu

http://vidsyeah.com/video/12323

und kein Client sollte brechen, weil die Clients nicht auf URLs, sondern auf Inhalte schauen sollten.

Cormac Mulhall
quelle
Wie Jons Antwort denke ich, dass Sie Ihren UX-Hut nicht tragen, wenn Sie darüber nachdenken. Ich möchte die Benutzerfreundlichkeit der Adresse erhöhen. Siehe meinen Kommentar in der Frage: "Ich mag die benutzerfreundlichen URLs, da Sie eine Vorstellung davon haben, was am Ende der URL steht, wenn Sie mit der Maus darüber fahren oder es in einer E-Mail oder einem Dokument sehen. Es ist besser für SEO, oder es war früher so."
Luke Puplett
2
Um eine 301 zu werfen, müsste ich in der Lage sein, nach der richtigen Ressource zu suchen, also bräuchte ich eine Historie.
Luke Puplett
1
Sie würden einen Verlauf benötigen, aber wenn Sie eine Site mit Ressourcen haben, die sich ändern, ist dies trotzdem eine gute Idee.
Cormac Mulhall
Es gibt kein Problem mit benutzerfreundlichen URIs. Ich würde nicht das Schema, dass die URI alles andere als funktionieren kann, wenn es am Ende eine ID hat. Das löst kein wirkliches Problem (der Benutzer muss sich noch an die ID erinnern) und führt ein verwirrendes URI-Schema ein (der Benutzer könnte zu Recht fragen, warum zwei verschiedene URIs, eine mit einem Rechtschreibfehler, auf dieselbe Ressource verweisen)
Cormac Mulhall
1
Wenn Sie Rechtschreibfehler in URIs befürchten, schlagen wir auf der 404-Fehlerseite für die falsch geschriebene URL URIs vor. Sie können eine Wortmustersuche durchführen und das zurückgeben, wonach der Benutzer möglicherweise sucht.
Cormac Mulhall
1

Die BBC verwendet Schnecken, die:

  • alphanumerisch (für Kompaktheit)
  • einzigartig (für Suchanfragen)
  • nicht sequentiell (damit die Ordnungssachen der Datenbank hinzugefügt werden, werden sie nicht angezeigt)

zB http://www.bbc.co.uk/programmes/b006mk7h

Jedes öffentliche Programm hat sowohl eine ID als auch einen Slug. IDs können dann wie gewohnt ganze Zahlen automatisch inkrementieren, und Lücken werden nicht angezeigt.

Nicholas Shanks
quelle
0

Aus REST-Sicht sollten URIs einer vorhersehbaren hierarchischen Struktur folgen, um die Benutzerfreundlichkeit zu verbessern.

Dies erleichtert den Verbrauchern die Verwendung. Wenn Ihre Daten Beziehungen aufweisen, ist eine Art Hierarchie erforderlich.

Es sieht so aus, als wäre das Schema: \video\[name]\[id]

Wenn der Name nicht für eine weitere Klassifizierung verwendet wird, kann er zugunsten von gelöscht werden \video\[id].

Wenn Sie jedoch die Videos klassifizieren möchten, ist der Name möglicherweise hilfreich.

Beispiele:

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

Es ist wirklich eine Entwurfsentscheidung darüber, wie der Zugriff modelliert wird.

Jon Raynor
quelle
Ich denke, Sie denken darüber aus einer API / Site-Informationsarchitektur PoV. Ich wollte einen generierten freundlichen URL-Teil einführen, um Menschen und SEO zu helfen. Anscheinend ist dies eine verbreitete Sache und wird als "Schnecke" bezeichnet. Der Name wird nicht für die Klassifizierung verwendet und hinzugefügt (nicht entfernt), um eine bessere Benutzeroberfläche mit der URL und unserer Site / Marke zu erzielen.
Luke Puplett