友好的url方案?

友好的url方案?,url,friendly-url,semantics,Url,Friendly Url,Semantics,我上周设置的许多东西中,有一个是非常漂亮的URL。现在,用户参数被传递到带有?u=的脚本中,这是懒惰黑客的症状(脚本承认是这样的)。然而,我一直在考虑重做它,我想得到一些关于可用选项的反馈。现在有两个页面,更新和图表,为用户提供信息。以下是我提出的两种可能性。“1234”是用户ID号。由于技术原因,无法使用用户名: http:///update/1234 http:///chart/1234 或 http:///1234/update http:///1234/chart 选项#1在概念

我上周设置的许多东西中,有一个是非常漂亮的URL。现在,用户参数被传递到带有?u=的脚本中,这是懒惰黑客的症状(脚本承认是这样的)。然而,我一直在考虑重做它,我想得到一些关于可用选项的反馈。现在有两个页面,更新和图表,为用户提供信息。以下是我提出的两种可能性。“1234”是用户ID号。由于技术原因,无法使用用户名:

  • http:///update/1234
  • http:///chart/1234

  • http:///1234/update
  • http:///1234/chart
选项#1在概念上是使用用户ID调用update。选项#2提供了一个动词来操作用户ID

从一致性的角度来看,哪个更有意义


提到的另一个选择是

  • http:///user/1234/update
  • http:///user/1234/chart
这为与特定用户无关的页面提供了空间。i、 e

  • http:///stats

    • 我个人喜欢这种风格,因为它让用户保持不变,但让你对他们有了具体的了解

      • http:///1234/update
      • http:///1234/chart
      如果您选择另一种方式,我希望能够看到/update或/chart下的所有内容,然后按用户缩小范围。

      选项1与常见的ASP.NET MVC示例相匹配。模型中的一些示例的形式为{controller}/{action}/{id}。有一个表显示了一些有效的路由模式:

      路由定义 --匹配URL的示例

      {controller}/{action}/{id} --/产品/展会/饮料

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

      博客/{action}/{entry} --/blog/show/123

      {reporttype}/{year}/{month}/{day} --/sales/2008/1/5

      {locale}/{action}
      --/en US/show

      {语言}-{国家}/{行动}

      --/en US/show

      从上下文的角度来看,我同意,应用程序后跟参数比项目的代理键后跟项目的上下文更有意义。最后,我会建议哪一种编程更自然。

      我会稍微倾向于使用userid——选项2——因为目录结构是用户数据上的两个不同函数。这是用户的图表和用户的更新

      这是一个相当小的问题,虽然,不知道是否有计划的重大扩展功能的这件事

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

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

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

          http:///user/update/1234

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

          是的,3号是最好的选择

          这支持您提到的非用户操作(stats/),以及多用户操作:


          http:///user/list/

          我刚刚用我的观点回答了这个问题,关于如何使URL变得RESTful、可黑客化和用户友好。我认为在这个问题上,链接比写类似的东西要好,因此链接就是这样。

          如果你采用这个方案,那么阻止(行为良好的)机器人对你的站点进行爬网就变得简单了:

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

          对我来说,这是一个经常被忽视的好机会。

          如果有一种列出用户的方法,我会介绍一个用户细分:

          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
          

          http:///users//users/1234//users/1234/chart/实际上它与您找到的演示匹配。MVC与URL编写器无关。已更新以包含其他选项。感谢您的帮助。#1更简单,因为我使用Apache的多视图将动词转换为脚本名称。但是,如果用另一种方式引用它更有意义的话,我可以做一些事情。我不认为功能会增加很多,因为页面的目标是提供StackOverflow本身所缺乏的功能。还有一些其他脚本尚未公开,它们处理服务的总体统计信息。你的/user/1234/动词很吸引人。
          
          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
          
          http://< tld >/user/ <--- user profile, use overloaded POST on this to update.
          http://< tld >/user/chart/ <--- user chart