关于如何设计出优秀的 URL

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/an...),比如在 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,它竟然如此受欢迎。即便没有搜索框。」这确实令人惊讶!

技术前沿拓展

前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

介绍一款程序员都应该知道的软件 JNPF快速开发平台 ,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCR 145. 判断对称二叉树

解题思路: class Solution {public boolean checkSymmetricTree(TreeNode root) {return root null || recur(root.left, root.right);}boolean recur(TreeNode L, TreeNode R) {if(L null && R null) return true;if(L null || R null || L.val ! R.v…

Java 深入理解 AQS 和 CAS 原理

AQS 介绍 AQS 全称是 Abstract Queued Synchronizer,一般翻译为同步器。它是一套实现多线程同步功能的框架,由大名鼎鼎的 Doug Lea 操刀设计并开发实现的。AQS 在源码中被广泛使用,尤其是在 JUC(Java Util Concurrent)…

天融信Topgate搭建

一、下载防火墙 首先下载防火墙,在虚拟机中打开。 二、网卡配置 防火墙设备上有5块网卡,分别对应接口eth1~5 这里要手动添加,还有需要注意vmnet1,他的必须是192.168.1.0,并且为DHCP 其它vlan无需设置DHCP 自定义网…

跨站脚本攻击漏洞XSS绕过22种方式总结

XSS漏洞简介 跨站脚本攻击在目前这个时间节点还是属于一个排位比较高的漏洞,在OWASP TOP10 2021中隶属于注入型漏洞,高居TOP3的排位,可见这个漏洞的普遍性。跨站脚本攻击的学习中我们主要需要明白的是跨站的含义,以及XSS的核心。…

企业数据存储监控

随着组织及其网络基础架构的不断扩展,存储将不可避免地成为一项挑战,随着存储需求的增长,调配更多存储资源的需求也会随之增长。为基础架构配置了更多存储资源后,它们需要不间断地运行,并且应该免受威胁。从本质上讲&a…

Syn_SegNet:用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络

Syn_SegNet: A Joint Deep Neural Network for Ultrahigh-Field 7T MRI Synthesis and Hippocampal Subfield Segmentation in Routine 3T MRI Syn_SegNet:用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络背景贡献实验为了确定哪个模态分割最…

list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方 原因 对于 double 类型的属性,不能直接使用减法运算符进行比较。减法运算符只能用于数值类型,而 double 是浮点数类型。 要在 double 属性上进行排序,可以使用 CompareTo 方法或者使用自定义的比较器。 更改 要在 double 属性…

K8s 源码剖析及debug实战之 Kube-Scheduler(五):优选算法详解

文章目录 0. 引言1. 回顾2. PrioritizeNodes3. 有哪些优选算法4. selectHost5. 总结6. 参考 0. 引言 欢迎关注本专栏,本专栏主要从 K8s 源码出发,深入理解 K8s 一些组件底层的代码逻辑,同时借助 debug Minikube 来进一步了解 K8s 底层的代码…

鸿蒙应用中图片的显示(Image组件)

目录 1、加载图片资源 1.1、存档图类型数据源 a.本地资源 b.网络资源 c.Resource资源 d.媒体库file://data/storage e.base64 1.2、多媒体像素图片 2、显示矢量图 3、添加属性 3.1、设置图片缩放类型 3.2、设置图片重复样式 3.3、设置图片渲染模式 3.4、设置图…

Go语言基本数据类型

Go语言基本数据类型 1.整型2.浮点型3.复数4.布尔型5.字符串窥探字符串类型字符串内建函数UTF-8编码字符串处理相关的四个包字符串和数字的转换 6.常量 1.整型 Go语言同时提供了有符号和无符号类型的整数运算。这里有int8、int16、int32和int64四种截然不同大小的有符号整数类型…

基于springboot公租房申请管理系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…

柯桥小语种学习,留学韩语 生活日常口语 语法

① N이다/A/V/았ㄹ/을지도 모르다 说不定 이미 도착했을 지도 모르니까 전화해 봐요 说不定已经到了,打电话试试 주말에 세일이 있을지도 모르니까 주말에 가 보자 周末说不定会搞活动,我们周末去吧 ② ㄴ/은/는/았었는/ㄹ/을지 모르다 不知道 처음이…

【webstorm中通过附加方式打开一个项目,这个项目本身有git,但是却看不到git的解决方法】

1、如图所示 设置-》版本控制-》未注册的根,选中后,再点加号,就可以了 2、如图所示 版本控制-》直接点加号-》选中项目路径,vcs选择git,点击确定就可以了

prometheus grafana mysql监控配置使用

文章目录 前传bitnami/mysqld-exporter:0.15.1镜像出现了问题.my.cnf可以用这个"prom/mysqld-exporter:v0.15.0"镜像重要的事情mysql监控效果外传 前传 prometheus grafana的安装使用:https://nanxiang.blog.csdn.net/article/details/135384541 本文说…

【电商项目实战】沙箱支付模拟支付功能

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…

芯片SIC8833可开发打气泵方案

无线车载打气泵方案由一块PCBA板集成其所需的功能,其充气原理是发动机通过两根三角带驱动气泵曲轴,进而驱动活塞进行打气,打出的气体通过导气管导入储气筒。另一方面储气筒又通过一根导气管将储气筒内的气体导入固定在气泵上的调压阀内&#…

ClickHouse基础知识(四):ClickHouse 引擎详解

1. 表引擎的使用 表引擎是 ClickHouse 的一大特色。可以说, 表引擎决定了如何存储表的数据。包括: ➢ 数据的存储方式和位置,写到哪里以及从哪里读取数据。 默认存放在/var/lib/clickhouse/data ➢ 支持哪些查询以及如何支持。 ➢ 并发数…

6.vue学习笔记(style绑定+监听器+表单的输入绑定)

文章目录 1.style绑定2.监听器3.表单的输入绑定3.1.复选框3.2.修饰符3.2.1 .lazy 1.style绑定 数据绑定的一个常见需求场景是操纵元素的 CSS style列表,因为style是attribute,我们可以和其他attribute一样使用v-bind将它们和动态字符串绑定。 但是&…

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决 一、万能办法 一、万能办法 //就是在报错的JS文件中第一行写上 /* eslint-disable */链接: https://www.yii666.com/blog/288808.html 其它的方法我遇见了再补充

快速搭建知识付费小程序,3分钟即可开启知识变现之旅

产品服务 线上线下课程传播 线上线下活动管理 项目撮合交易 找商机找合作 一对一线下交流 企业文化宣传 企业产品销售 更多服务 实时行业资讯 动态学习交流 分销代理推广 独立知识店铺 覆盖全行业 个人IP打造 独立小程序 私域运营解决方案 公域引流 营销转化 …