代码之家  ›  专栏  ›  技术社区  ›  Frank Krueger

哪个是更好的长期URL设计?

  •  3
  • Frank Krueger  · 技术社区  · 15 年前

    我喜欢堆栈溢出的URL——特别是表单:

    • /问题/ID/标题
    • /用户/ID/名称

    这很好,因为随着问题标题的改变,搜索引擎将输入新的URL,但所有旧的URL仍然可以工作。

    杰夫在其中一个播客中提到——在宣布“天赋”功能的时候——他对自己在这些表单中所做的一些设计决策感到遗憾。具体来说,他被他的伪动词困扰,如:

    1. /用户/编辑/ID
    2. /帖子/ID/编辑

    有点不清楚他最后喜欢哪种动词形式。

    您喜欢哪种模式(1或2),为什么?

    6 回复  |  直到 15 年前
        1
  •  8
  •   Gav    15 年前

    我更喜欢模式2,原因很简单,就是URL的可读性更好。比较:

    1. “我要访问此ID的用户编辑资源”与
    2. 我想使用此ID访问“帖子”资源并对其进行编辑

    如果您忘记了每个URL的最后一部分,那么在第二个URL中,您有一个很好的恢复计划。

    1. 嗨,获取/用户/编辑…什么?您要编辑什么?错误!
    2. 嗨,GeT/Posts/ID…哦,你想要带这个身份证的帖子,嗯?酷。

    我的2便士!

        2
  •  2
  •   Spencer Ruport    15 年前

    我猜他更喜欢2。

    如果你把绳子放在第一位,这意味着它必须一直在那里。否则你会得到难看的网址,比如:

    /users//4534905
    

    不管你需要什么用户的ID,所以这个

    /user/4534905/
    

    结果看起来好多了。如果你想要假动词,你可以把它们加到结尾。

    /user/4534905/edit
    
        3
  •  1
  •   Keith Adler    15 年前

    两者都不。在URL中输入非英语数字ID对搜索引擎来说很难友好。你最好用空格代替破折号,全部用小写字母。所以对我来说,正确的形式是:

    /question/how-do-i-bake-an-apple-pie
    /user/frank-krueger
    
        4
  •  1
  •   kryoko    15 年前

    我也喜欢第二种选择。

    但是我仍然相信结果的URL是丑陋的,因为其中没有任何意义。 这就是为什么我倾向于将URL创建分为两部分:

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

    两个URL都引用同一个文档,给定后者,内部查询中只使用ID。因此,我可以提供一些有意义的URL,并且仍然避免膨胀我的查询。

        5
  •  1
  •   Aiden Bell    15 年前

    我喜欢2号:

    也:

    /questions/foo =所有称为“foo”的问题
    /questions/{id}/foo ==称为“foo”的问题

    /users/aiden ==所有呼叫AIDEN的用户
    /users/{id}/aiden =aiden用户
    /users/aiden?a=edit /users/aiden/edit ==编辑名为aiden的用户列表?
    /users/{id}/edit /users/{id}?a=edit 更好

    /rss/users/aiden ==名为aiden的用户的RSS更新
    /rss/users/{id} ==用户活动的RSS源
    /rss/users/{id}/aiden ==Aiden配置文件更改的RSS源

    我不介意自己去争论,我认为/x/y/z应该引用一个可变的资源,而get/post/put应该对此采取行动。

    我的2P

        6
  •  0
  •   Christos Hayward    15 年前
    /问题/如何烤苹果派
    /问题/如何烤苹果派-2
    /问题/如何烤苹果派…