【问题标题】:Hierarchical vs. flat URL分层与平面 URL
【发布时间】:2012-01-04 11:09:48
【问题描述】:

我有一个像航班>座位>预订这样的资源结构,所以预订属于某个座位,属于某个航班:

http://example.com/jdf_3prGPS4/1/jMBDy46PbNc
                   ----------- - -----------
                        |      |       |
                        |      |       |
                     flight  seat  reservation

由于客户得到这个(有点难看的)URL 以便以后取消,我考虑省略资源结构并缩短预订链接:

http://example.com/reservation/jMBDy46PbNc                     

您是否发现任何不缩短此 URL 的原因(与用户相关)?

【问题讨论】:

  • 假设网址会做完全相同的事情,那么它们肯定是可以互换的吗?只有你能告诉我们他们是否真的做同样的事情。 :)
  • 是的,这些 URL 是可以互换的,并且会指向完全相同的资源。
  • 那么我认为没有理由不缩短网址。 :)

标签: url rest hierarchy url-design


【解决方案1】:

最终用户不太关心 urls 结构是什么。事实上,考虑到他们在那里的样子,他们几乎可以肯定甚至不想看他们,而只是点击一下。这只真正留下了功能方面的考虑。

如果 URL 指向完全相同的资源,并且该资源的行为与不同的 url 完全相同,那么几乎按照定义,您使用哪一个都没有关系。

我想唯一真正的因素可能是是否存在任何安全隐患。我能猜出预订 ID 吗?这会让我到任何地方(即我还需要登录或其他什么)吗?如果还有座位和航班,他们就必须能够猜出这三者的有效组合,这显然比强行强制预订 ID 要困难得多。

如果最后一个不是问题,那么我认为没有任何理由使用更长的 url...

【讨论】:

  • 我现在使用的是短变体。
【解决方案2】:

提供更长或更短的 URL 不是一个大问题,但你是只提供其中一个还是两个都提供。如果两个 URL 返回相同的内容,那么您的缓存中将有重复的信息(无论是服务器端、中间还是客户端),并且这些可能会在两个资源之间不同步,特别是如果它们缓存在不同的位置一生。理想情况下,您应该提供其中一种。如果你真的想同时提供两者,你应该将一个重定向到另一个而不是复制它。

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 2012-01-29
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多