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
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)Antworten:
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.
quelle
Ich habe in der Vergangenheit zwei verschiedene Szenarien verwendet.
/id/some-slug
wo dasid
nachgeschlagen 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./permalink
fü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 diepermalink
fü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:
Siehe noch einmal [1] und [2] .
quelle
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.
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
oder
Allerdings ist die Verwendung von IDs nicht verkehrt, wenn dies für Ihr Datenmodell sinnvoll ist, insbesondere, wenn Sie nur nach Videos gruppieren.
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
zu
und kein Client sollte brechen, weil die Clients nicht auf URLs, sondern auf Inhalte schauen sollten.
quelle
Die BBC verwendet Schnecken, die:
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.
quelle
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:
Es ist wirklich eine Entwurfsentscheidung darüber, wie der Zugriff modelliert wird.
quelle