2009-07-14 8 views
3

Ich mag URLs der Stack-Überlauf - speziell die Formen:Welches ist ein besseres langfristiges URL-Design?

  • /Fragen/{Id}/{Title}
  • /users/{Id}/{Name}

Es ist toll, weil Wenn sich der Titel der Frage ändert, werden die Suchmaschinen die neue URL eingeben, aber alle alten URLs funktionieren weiterhin.

Jeff erwähnte in einem der Podcasts - zu der Zeit, als das Flair Feature angekündigt wurde -, dass er einige Designentscheidungen bereute, die er getroffen hatte, wenn es um diese Formulare ging. Insbesondere wurde er durch seine pseudo-Verben beunruhigt, wie in:

  1. /users/edit/{Id}
  2. /posts/{Id}/bearbeiten

Es war ein wenig unklar Welche dieser Verbformen hat er bevorzugt?

Welches Muster bevorzugen Sie (1 oder 2) und warum?

Antwort

8

Ich ziehe Muster 2 aus dem einfachen Grund, dass die URL besser liest. Vergleichen:

  1. gegen
  2. „Ich habe den NUTZER EDIT Ressource, für diese ID zugreifen möchten“ „Ich möchte die BEITRÄGE Ressource zuzugreifen, mit dieser ID und bearbeiten“

Wenn Sie Vergessen Sie den letzten Teil jeder URL, dann haben Sie in der zweiten URL einen schönen Wiederherstellungsplan.

  1. Hallo, erhalten/Benutzer/bearbeiten ... was? Was möchtest du bearbeiten? Error!
  2. Hallo, hol/posts/id ... oh willst du den Post mit dieser ID hmm? Cool.

Meine 2 Pfennige!

+0

+1 Ich mag dein Denken! –

1

Weder. Die Eingabe einer nicht englischen numerischen ID in der URL ist kaum suchmaschinenfreundlich. Sie sollten Titel mit Leerzeichen ersetzen, die durch Bindestriche und Kleinbuchstaben ersetzt werden. Also für mich ist die korrekte Form:

/question/how-do-i-bake-an-apple-pie 
/user/frank-krueger 
+3

Dies ist in Ordnung, bis Sie feststellen, dass Sie nicht zwei Fragen mit dem gleichen Titel haben können, und dass Sie Abfragen auf Varchar-Spalten (sogar indexiert) anstelle von PKs – blu

+5

Äh, es ist nicht Suchmaschine unfreundlich. Und Ihr Weg führt zu teuren SQL-Abfragen. –

+0

Die Ablehnung dieser Antwort ist hart. Er hat recht, das sind bessere URLs! Sie sind jedoch unpraktisch zu implementieren, weshalb IDs weiterhin verwendet werden und dem Benutzer ausgesetzt werden. Angesichts der Tatsache, dass es so ist, ist es wahrscheinlich der beste Kompromiss. – rix0rrr

2

Meine Vermutung wäre er bevorzugt # 2.

Wenn Sie die Zeichenfolge zuerst eingeben, bedeutet dies, dass sie immer da sein muss. Ansonsten erhalten Sie hässlich suchen Urls wie:

/users//4534905 

Egal, was Sie die ID des Benutzers müssen so dieses

/user/4534905/ 

besser endet suchen. Wenn Sie Fakie Verben wollen, können Sie sie zum Ende hinzufügen.

/user/4534905/edit 
0
/question/how-do-i-bake-an-apple-pie 
/question/how-do-i-bake-an-apple-pie-2 
/question/how-do-i-bake-an-apple-pie-...
+0

Jemand, der darauf bedacht ist, zu glauben, dass sie richtig sind, indem er sagt, dass das Format, das ich vorgeschlagen habe, falsch ist, stimmte Sie ab. Jeder, der PKeys in seine URL einfügt, hat als Entwickler ernsthafte Probleme. Ich habe dich zurückgewählt. –

1

Ich mag Nummer 2:

auch:

/questions/foo == Alle Fragen "foo" genannt
/questions/{id}/foo == Eine Frage namens "foo"

/users/aiden == Alle Benutzer aufgerufen Aiden
/users/{id}/aiden == Ein Benutzer namens Aiden
/users/aiden?a=edit oder /users/aiden/edit == Bearbeiten Sie die Liste der Benutzer namens Aiden?
/users/{id}/edit oder /users/{id}?a=edit ist besser

/rss/users/aiden == Ein RSS-Update des Benutzers namens Aiden
/rss/users/{id} == Ein RSS-Feed von einer Aktivität des Benutzers
/rss/users/{id}/aiden == Ein RSS-Feed Profil von Aidens ändert

I GET Argumente persönlich nicht und denke, dass/x/y/z sollte sich auf eine veränderbare Ressource beziehen und GET/POST/PUT sollte darauf reagieren.

Mein 2p

+0

Ich stimme sehr nicht zu>^..^< Questionmarks, kaufmännische Und-Zeichen, jede Art von Sonderzeichen (neben/ofc) in Abfragen sind ein Verbrechen in meiner Welt. – kryoko

1

Ich bevorzuge die zweite Option auch.

Aber ich glaube immer noch, dass die resultierenden URLs hässlich sind, weil es überhaupt keine Bedeutung darin gibt. Deshalb neige ich dazu, die URL Schöpfung in zwei Teile aufgeteilt:

/posts/42 
/posts/42-goodbye-and-thanks-for-all-the-fish 

Beiden URLs auf das gleiche Dokument beziehen und diese nur die ID verwendet wird, in der internen Abfrage angegeben. Somit kann ich etwas aussagekräftige URLs anbieten und trotzdem davon absehen, meine Abfragen aufzublähen.

+0

Sie sagen also, dass die Änderung von einem Schrägstrich '/' zu einem Bindestrich - 'Bedeutung hinzufügt?/posts/42/auf Wiedersehen_und_Thanks_for_all_the_fish sieht nicht so anders aus/posts/42_goodbye_and_thanks_for_all_the_fish –

+0

Die Zeichen fügen keine Bedeutung hinzu. Das Suffix (Auf Wiedersehen und Danke für alles) tut es jedoch. – kryoko

+1

Es ist wichtig zu beachten, dass die Verwendung eines anderen Schrägstrichs irreführend wäre, da wir zu diesem Zeitpunkt keine verschachtelte Beziehung oder Ähnliches haben. Wir möchten lediglich einen Hinweis darauf geben, auf welchen Inhalt sich die URL bezieht. – kryoko