优秀的 URL 设计示例
URL 无所不在。它们不只用输入道浏览器中。它们的使用方式有很多:
- 作为脚本编写、抓取和其他编程数据检索的目标。
- 作为参考,印刷在实体书的脚注和附录中。
- 作为可通过物理介质访问的可操作触发器,例如可扫描的二维码或物联网设备按钮。
- 还有更多!
当回顾这些年来我遇到的优秀的 URL 设计的例子时——当我看到它们时,我停顿了一下,心想“哇,它们真的太棒了!”——这些是我能想到的一些:
StackOverflow
StackOverflow 是我记忆中第一个遇到在计算机和人类需求之间取得良好平衡的 URL 的地方
它的 URL 像这样:
/questions/:id/:slug
:id
是问题的唯一标识符,不会透露任何内容。另一方面,:slug
是一种人类可读的问题转述,它可以让你在不去网站的情况下理解这个问题。
美妙之处在于 :slug
是 URL 中的一个可选参数。例如:
stackoverflow.com/questions/16245767
它没有告诉你所问的问题,但它是一个有效的 URL,允许服务器轻松地找到和提供独特的内容。
不过 StackOverflow 也支持 URL 的 :slug
部分,这可以让人通过 URL 快速理解其中内容。
stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript/
如前所述,:slug
是可选的。它不是服务器查找内容所必需的。事实上,随着时间的推移,它可以很容易地进行修改,而不会破坏 URL(我觉得这很优雅)。
诚然,它也可以被欺骗性地使用。例如,这与上面的 URL 相同,但它预示着完全不同的内容(不破坏链接):
stackoverflow.com/questions/16245767/how-to-bake-a-cake
不过,凡是都是权衡
Slack
我记得 Slack 曾发起过一场营销活动,向人们宣传该产品。他们在页面副本和 URL 中使用了营销活动的语言——“Slack is”,例如
slack.com/is
slack.com/is/team-communication
slack.com/is/everything-in-one-place
slack.com/is/wherever-you-are
我记得我对这种将讲故事活动的设计引入 URL 本身的努力非常感兴趣。
从那以后,我一直对那些试图形成自然语言句子的 URL 感到高兴——slack.com/is/team-communication
——而不是连接一系列分层关键字——slack.com/product/team-communication
。
说到用 URL 中的句子结构做有趣的事情…
Jessica Hische
Jessica Hische 将其网站放在 .is
域名下( Iceland 缩写)。
她在自己的网站上重复这种有趣的第三人称形式的“我是”。例如,单击主导航中的“关于”,它将带您进入:
很有趣! mydomain.com/about
也很清晰,不过但我喜欢用句子结构来描述“关于”这个词的奇思妙想。
她主要导航中的所有名词以及她的个人作品都遵循这种模式。就像这篇关于她一次节日烹饪包装演出的文章一样,网址是:
jessicahische.is/sofulloffancypopcorn
URLs as Product
我一直很喜欢那些 URL 很好地映射到域名语义的服务。例如,GitHub 的 URL 非常好地映射到 git 语义,比如 git 中的三点 diff 比较:
/:owner/:project/compare/ref1...ref2
例如
github.com/django/django/compare/4.2.7...main
对于技术产品,这种不一定需要通过用户界面就能导航到网站的能力相当的酷。
NPM 有点类似。想在 NPM 上查看 react-router
吗?你不必去 NPM 的主页点击或使用他们的搜索框。一旦你熟悉了他们的网站结构,你就知道你可以使用以下方法查找包:
/package/:package-name
例如
npmjs.com/package/react-router
想要查看包的特定版本?
/package/:package-name/v/:semver
比如
npmjs.com/package/react-router/v/5.3.4
当你使用特定的产品时,这些快捷方式非常有用。以 NPM 为例,你正在搜索 package.json
,并且需要查找固定在特定版本的特定软件包的一些详细信息,您只需识别您想要的版本并在 URL 栏中键入详细信息,就可以导航到该软件包的 NPM 详细信息。
像 unpkg 这样的 NPM CDN 在遵循这些语义方面也做得很好。想要从已发布的包中获取文件吗?unpkg 的主页上写道:
unpkg.com/:package@:version/:file
在这种情况下,URL可以是产品本身,这使得其设计更加重要。
你呢?
以下是我多年来喜欢使用或看到的几个 URL 示例。我相信还有其人,但我很想知道你最喜欢的是什么?欢迎评论区留言!