【问题标题】:Is blog/posts/year/month/day/slug a RESTful URI scheme?blog/posts/year/month/day/slug 是 RESTful URI 方案吗?
【发布时间】:2011-11-19 21:07:47
【问题描述】:

我知道这类 URI 在 SEO 方面很不错,但它们是 RESTful 的吗?
我的预感是他们不是,但我正在寻找验证。
我认为它们不是 RESTful 的原因是因为年、月和日是查询的参数,而 slug 实际上是标识符。
blog/posts/slug?year=2011&month=9&day=19 是更好的方法吗?
我不确定。

【问题讨论】:

  • 没有 RESTful 或非 RESTful URL 这样的东西。我认为这是一个完全错误的约束,它来自过时和替换的 URI 规范中的单行。

标签: rest architecture uri web


【解决方案1】:

blog/posts/year/month/day 不是资源标识符。无论如何都没有意义

所以你想要的是类似的东西

mysite.com/posts/<id>

或者如果您想查看某一天的所有帖子

mysite.com/posts?filter=2011/9/19

【讨论】:

  • 我不是反对者,但你的第一句话是不正确的。它是一个完全有效的资源标识符。第一个 URI 很可能会标识在特定日期发布的博客文章列表。在路径段中使用年月日是完全有效的,因为它是一个自然的层次结构。无论年份如何,都不太可能有人想要 2 月 2 日的所有帖子列表。您使用查询字符串的示例也是一种有效的方法,也是我将采用的方法。
  • @DarrelMiller。嗯,资源posts 不包含year。资源 year 不包含 month。等等。我认为它的 URI 滥用
  • 请随时指出您认为违反了 uri 规范的部分。
  • @DarrelMiller 我没有说有任何违反,这不是一个好的 uri。你可以做得更好。
【解决方案2】:

你没有抓住重点。您正在担心 REST 不关心的事情。只要客户端从超文本中获取 URL 并且不根据方案自己构建它们,任何一种方案都可以。 Please read this article about this type of misunderstanding.

【讨论】:

  • 是的。而且,根据定义,HTTP URI 的路径组件是分层的。如果 year/ 和 year/month/ 和 year/month/day/ 也是有意义的资源标识符,那么 year/month/day/slug 更有意义。
【解决方案3】:

您应该将 URL 基于它所标识的资源,而不是基于您在服务器后端用于生成资源的方法。

因此,您的方案可以很好地识别博客文章。

REST 原则不太关心您如何识别资源,只是动词不应出现在资源标识符中,因此GetBlogPost?year=2011&month=9&day=19 将是非 RESTful URI 的一个示例。

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多