如何设计优秀的 URL?

原创
2023/12/22 10:25
阅读数 32

作者:Jim Nielsen,原文链接


Kyle Aster 在 2010 年就写过为什么认真设计 URL 很重要

URL 是通用的,它们适用于 Firefox, Chrome, Safari, Internet Explorer, cURL, wget, 以及 iPhone,Android, 甚至便签。它们是网络的唯一通用语法,不要把这当作理所当然。

我喜欢这个提醒,让人意识到 URL 的无处不在。它们不仅仅可以在浏览器的地址栏中使用,还可以以多种方式使用:

  • 作为脚本和爬虫等程序化数据检索的目标。
  • 作为参考,在实体书籍的脚注和附录中打印出来。
  • 作为可通过物理介质进行操作触发的方式,例如可扫描的二维码或物联网设备按钮。
  • 和其他!

当我回顾过去遇到过的优秀 URL 设计示例[1]时 - 那些会让我停下来想「哇,真棒!」- 以下几个就会浮现在我的脑海中。

Stack Overflow

Stack Overflow 是我印象里遇到的第一个在满足计算机和人类需求之间取得了优秀平衡的 URL。

URL 遵循以下模式:

/questions/:id/:slug

:id 是个唯一的标识符,没有任何透露任何问题的内容。:slug 则是对问题的人类可读的释义,让你能够理解问题而无需访问网站。

美妙之处在于 :slug 是 URL 中的可选参数。比如:

stackoverflow.com/questions/16245767

没有交代关于所提问题的任何信息,但它是一个有效的 URL,可以让服务器轻松地找到网页。

但 Stack Overflow 也支持 URL 中的 :slug 部分,这使人们能够快速理解该网页里的内容。

stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript/

如前所述,:slug 是可选的。服务器不需要它来查找和提供相关内容。实际上,它可以在时间推移中轻松被更改而不会破坏 URL(太优雅了!)。

当然,它也可以具有欺骗性。例如,下面是与上述相同的 URL,但指向着完全不同的内容(链接还是好的,只是指向的内容和 slug 不符合):

stackoverflow.com/questions/16245767/how-to-bake-a-cake

嘿嘿,一切都有取舍。

顺便提一嘴,Bytebase 的 URL 也采用了类似的方式 👇

file

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, 而不是连接一系列层次关键词的 URL: slack.com/product/team-communication.

说到在 URL 中做有趣的句子结构。。。

Jessica Hische

Jessica Hisch 在一个 .is 域名下拥有自己的网站(显然 .is 代表着冰岛)。

jessicahische.is

她在整个网站上都使用了这种有趣的第三人称形式的「我是」。例如,点击主导航中的 About (关于我) 按钮,它会带你到:

jessicahische.is/anoversharer

太有趣了!虽然 mydomain.com/about 也很清晰,但我喜欢用句子结构来描述「关于我」页面,让人觉得更有趣。

她主导航中所有名词都遵循这个模式,并且她个别作品也是如此。就像这篇关于她做过的一个节日烹饪包装工作的介绍文章,URL 为:

jessicahische.is/sofulloffancypopcorn

有点意思!

URL 作为产品

我一直很喜欢 URL 与其领域语义相匹配的功能。例如,GitHub 的 URL 非常好地映射了 git 的语义 (https://www.quora.com/Which-sites-have-the-best-URL-design/answer/Simon-Willison),比如在 git 中进行差异比较:

/: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 (https://unpkg.com/) 这样的 NPM CDN 也遵循了这些语义。想要从已发布软件包中获取某个文件可以这样:

unpkg.com/:package@:version/:file

在这种情况下,URL 可以是产品本身,这使得其设计变得更加重要[2]。

你喜欢的 URL?

这些是我多年来喜欢使用和看到的一些优秀 URL 示例。我确信还有其他的,也很想知道你最喜欢哪个?欢迎留言分享!


[1] 我在「优秀 URL 设计」方面没有找到很多好资源。Alex 的这篇文章 相当不错。我梦想有一个专门展示优秀 URL 的 Dribbble。如果你有想法,url-gallery.com 域名还可用。。。

[2] unpkg 的创始人 Michael Jackson 提到过:「令我惊讶的是,考虑到每个人使用 unpkg 时都要手写 URL,它竟然如此受欢迎。即便没有搜索框。」这确实令人惊讶!unpkg 非常受欢迎:2020 年 9 月至 10 月间每月达到了 500 亿次请求


💡 更多资讯,请关注 Bytebase 公号:Bytebase

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部