我上周设置的scraper service中缺少的很多内容都是漂亮的网址。现在,用户参数正在通过?u = 传递到脚本中,这是懒惰黑客的一个症状(这是脚本无可置疑的)。但是,我一直在考虑重做它,我想得到一些关于可用选项的反馈。现在有两个页面,更新和图表,为用户提供信息。以下是我提出的两种可能性。 “1234”是用户ID号。由于技术原因,遗憾的是无法使用用户名:
或
概念上,选项#1使用用户ID调用update。选项#2提供动词来操作用户ID。
从一致性的角度来看,这更有意义吗?
提到的另一个选项是
这为与特定用户无关的页面提供了空间。即。
答案 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 - 因为(存在的)目录结构是用户数据上的两个不同的函数。这是用户的图表,以及用户的更新。
但这是一个非常小的问题,但不知道是否有计划大幅扩展此功能。
答案 3 :(得分:4)
我个人喜欢这种风格,因为它让用户保持不变,但会为您提供具体的见解。
如果你走另一条路,我希望能够看到/ 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