Frank Krueger
Frank Krueger

Reputation: 70983

Which is a better long term URL design?

I like Stack Overflow's URLs - specifically the forms:

It's great because as the title of the question changes, the search engines will key in to the new URL but all the old URLs will still work.

Jeff mentioned in one of the podcasts - at the time the Flair feature was being announced - that he regretted some design decisions he had made when it came to these forms. Specifically, he was troubled by his pseudo-verbs, as in:

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

It was a bit unclear which of these verb forms he ended up preferring.

Which pattern do you prefer (1 or 2) and why?

Upvotes: 3

Views: 284

Answers (6)

Aiden Bell
Aiden Bell

Reputation: 28386

I like number 2:

also:

/questions/foo == All questions called "foo"
/questions/{id}/foo == A question called "foo"

/users/aiden == All users called aiden
/users/{id}/aiden == A user called aiden
/users/aiden?a=edit or /users/aiden/edit == Edit the list of users called Aiden?
/users/{id}/edit or /users/{id}?a=edit is better

/rss/users/aiden == An RSS update of users called aiden
/rss/users/{id} == An RSS feed of a user's activity
/rss/users/{id}/aiden == An RSS feed of Aiden's profile changes

I don't mind GET arguments personally and think that /x/y/z should refer to a mutable resource and GET/POST/PUT should act upon it.

My 2p

Upvotes: 1

kryoko
kryoko

Reputation: 389

I prefer the 2nd option as well.

But I still believe that the resulting URLs are ugly because there's no meaning whatsoever in there. That's why I tend to split the url creation into two parts:

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

Both URLs refer to the same document and given the latter only the id is used in the internal query. Thus I can offer somewhat meaningful URLs and still refrain from bloating my Queries.

Upvotes: 1

Gav
Gav

Reputation: 11460

I prefer pattern 2 for the simple reason is that the URL reads better. Compare:

  1. "I want to access the USERS EDIT resource, for this ID" versus
  2. "I want to access the POSTS resource, with this ID and EDIT it"

If you forget the last part of each URL, then in the second URL you have a nice recovery plan.

  1. Hi, get /users/edit... what? what do you want to edit? Error!
  2. Hi, get /posts/id... oh you want the post with this ID hmm? Cool.

My 2 pennies!

Upvotes: 8

Christos Hayward
Christos Hayward

Reputation: 5993

/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-...

Upvotes: 0

Spencer Ruport
Spencer Ruport

Reputation: 35117

My guess would be he preferred #2.

If you put the string first it means it always has to be there. Otherwise you get ugly looking urls like:

/users//4534905

No matter what you need the id of the user so this

/user/4534905/

Ends up looking better. If you want fakie verbs you can add them to the end.

/user/4534905/edit

Upvotes: 2

Keith Adler
Keith Adler

Reputation: 21178

Neither. Putting a non-English numeric ID in the URL is hardly search engine friendly. You are best to utliize titles with spaces replaced with dashes and all lowercase. So for me the correct form is:

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

Upvotes: 1

Related Questions