友好的网址计划?

时间:2008-09-22 00:48:38

标签: url friendly-url semantics

我上周设置的scraper service中缺少的很多内容都是漂亮的网址。现在,用户参数正在通过?u = 传递到脚本中,这是懒惰黑客的一个症状(这是脚本无可置疑的)。但是,我一直在考虑重做它,我想得到一些关于可用选项的反馈。现在有两个页面,更新和图表,为用户提供信息。以下是我提出的两种可能性。 “1234”是用户ID号。由于技术原因,遗憾的是无法使用用户名:

  • 的http://< tld> / update / 1234
  • 的http://< tld> / chart / 1234

  • 的http://< tld> / 1234 / update
  • 的http://< tld> / 1234 / chart

概念上,选项#1使用用户ID调用update。选项#2提供动词来操作用户ID。

从一致性的角度来看,这更有意义吗?


提到的另一个选项是

  • 的http://< tld> / user / 1234 / update
  • 的http://< tld> / user / 1234 / chart

这为与特定用户无关的页面提供了空间。即。

  • 的http://< tld> / stats

9 个答案:

答案 0 :(得分:6)

如果你采用这种方案,那么阻止(表现良好的)机器人来抓住你的网站变得很简单:

 http://< tld >/update/1234
 http://< tld >/chart/1234

这是因为你可以设置一个/robots.txt文件来包含:

 Disallow /update/
 Disallow /chart/

对我而言,这是一个经常被忽视的好奖励。

答案 1 :(得分:5)

选项#1匹配常见的ASP.NET MVC示例。 Model View Controller模型中的一些示例的格式为{controller} / {action} / {id}。 .NET 3.5 quickstart on routing有一个表格,显示了一些有效的路线模式:

路线定义 - 匹配网址的示例

{控制器} / {行动} / {ID} - /产品/展示/饮料

{表} /Details.aspx - /Products/Details.aspx

博客/ {动作} / {条目} - / blog / show / 123

{REPORTTYPE} / {年} / {月} / {天} - / sales / 2008/1/5

{区域设置} / {动作}
- / en-US / show

{语言} - {国家} / {动作}
- / en-US / show

答案 2 :(得分:5)

我会倾向于使用userid - 选项#2 - 因为(存在的)目录结构是用户数据上的两个不同的函数。这是用户的图表,以及用户的更新。

但这是一个非常小的问题,但不知道是否有计划大幅扩展此功能。

  • 一切都将成为个人用户的附加功能foo和bar和baz吗?如果是这样,由于上述原因,选项#2变得更具吸引力 - 用户标识是核心数据,从语义上开始是有意义的。
  • 您是否要添加非用户驱动的功能?带头标题目录可能有意义 - / user / 1234 / update,/ user / 1234 / chart,/ question / 45678 / activity,/ question / 45678 / stats等。

答案 3 :(得分:4)

我个人喜欢这种风格,因为它让用户保持不变,但会为您提供具体的见解。

  • 的http://&LT; tld&gt; / 1234 / update
  • 的http://&LT; tld&gt; / 1234 / chart

如果你走另一条路,我希望能够看到/ update或/ chart下的所有内容,然后由用户缩小。

答案 4 :(得分:1)

跟后者一起去; URL是分层的(或者,至少用户通过类似于本地目录路径的方式读取它们)。这里的重点是特定用户的不同视图,因此“用户”是更一般的概念,应首先出现。

答案 5 :(得分:1)

我刚刚回答了问题"How do you structure your URL routes?",其中包含了关于使URL RESTful,hackable和用户友好的意见。我认为链接比写这个问题中的类似内容更好,因此链接。

答案 6 :(得分:0)

我同意从上下文的角度来看,参数后跟参数对我来说比项目的代理键更有意义,后面是项目的上下文。最终,我建议你编程哪个更自然。

答案 7 :(得分:0)

惯例说对象/动词/ ID,所以它应该是:

的http://&LT; tld&gt; / user / update / 1234

(我刚注意到这与您更新的问题相符:)

所以是的,#3是最好的选择。

这支持非用户操作(stats /)以及多用户操作:

的http://&LT; tld&gt; / user / list /

答案 8 :(得分:0)

如果有办法列出用户,我会介绍一个用户群:

http://< tld >/users/ <--- user list
http://< tld >/users/1234/ <--- user profile, use overloaded POST on this to update.
http://< tld >/users/1234/chart/ <--- user chart

如果您只能看到自己的详细信息,即用户彼此不可见,则您不需要用户ID,因为您可以从会话中推断出来,在这种情况下:

http://< tld >/user/ <--- user profile, use overloaded POST on this to update.
http://< tld >/user/chart/ <--- user chart