不变的URI与变化的人类

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

人类友好的URI与不变的URI是相互矛盾的概念。为了解决这个问题,可以使用机器可读的标识符和人类可读的slug结合的URI设计。但这种设计在简单静态文件主机上无法使用。URI设计需要权衡人类友好性和不变性。

🔎

延伸解读

人类友好与不变性的根本矛盾

文章指出,人类友好的URI(如包含可读slug)与“酷URI不变”原则存在内在冲突。因为人类会犯错,slug中的信息可能错误,而一旦发布,错误就被永久固定在URI中。例如,/the-earth-is-flat 即使内容更正,slug也无法更改,否则破坏链接。这揭示了追求可读性时需付出的代价。

StackOverflow式设计的巧妙与局限

StackOverflow采用 /:id/:slug 结构,将机器可读ID置于前,人类可读slug置于后。这样slug可随时间变化而不破坏链接,因为路由只依赖ID。但文章也指出,这种设计依赖服务器端路由逻辑,在简单静态文件主机上无法实现,且无法防止他人构造误导性slug。

静态主机的变通方案与风险

对于静态文件主机,文章提出用查询参数提供人类可读上下文,如 /19382?the-earth-is-flat。这无需特殊路由即可工作,且参数可随内容更新而改变。但该方法同样可能被滥用,例如附加误导性参数。文章强调这只是一个可行但不一定推荐的做法。

❓

Q&A

什么是人类友好的URI?

人类友好的URI是指易于人类阅读和理解的URI,通常包含描述性信息。

不变的URI和人类友好的URI之间有什么矛盾?

不变的URI强调链接不应改变,而人类友好的URI可能因人为错误而变化,这导致了矛盾。

StackOverflow是如何设计URI以解决这一矛盾的?

StackOverflow的URI设计将机器可读的标识符放在前面,人类可读的slug放在后面,从而允许slug随时间变化而不破坏链接。

在简单静态文件主机上,如何处理人类友好的URI?

可以使用搜索参数提供人类可读的上下文,例如使用形式如/19382?the-earth-is-flat。

使用人类友好的slug有什么风险?

使用人类友好的slug可能会因错误而变化,这些错误会在发布时永久固定在URI中。

如何在URI设计中平衡人类友好性和不变性?

可以结合机器可读的标识符和人类可读的slug来设计URI,以实现两者的平衡。

🏷️

标签

➡️

继续阅读