ChatGPT解决这个技术问题 Extra ChatGPT

连字符、下划线或驼峰式作为 URI 中的单词分隔符?

我正在为 Intranet 应用程序设计基于 HTTP 的 API。我意识到这在宏伟的计划中是一个很小的问题,但是:我应该使用连字符、下划线还是驼峰式来分隔 URI 中的单词?

以下是我的初步想法:

骆驼香烟盒

如果服务器不区分大小写,则可能出现问题

似乎在查询字符串键(http://api.example.com?**searchQuery**=...)中有相当广泛的使用,但在其他 URI 部分没有

连字符

比其他替代品更美观

似乎被广泛用于 URI 的路径部分

在野外从未见过连字符的查询字符串键

可能对 SEO 更好(这可能是一个神话)

下划线

编程语言可能更容易处理

几个流行的 API(Facebook、Netflix、StackExchange 等)在 URI 的所有部分都使用下划线。

我倾向于对所有内容都使用下划线。大多数大玩家都在使用它们这一事实令人信服(参见https://stackoverflow.com/a/608458/360570)。

从我读过的所有内容来看,您应该使用连字符,但下划线似乎更容易管理。
我相信 连字符 曾一度更适合 SEO。现在这可能不是真的,但是有很多人采用它,因此它被更广泛地接受为最佳实践。另一方面,下划线在后端编程中可能更容易处理。我使用 PHP,因此在函数名中使用下划线比使用连字符要容易得多。 camelCase 可能是最容易实现的,但阅读起来往往很困难。最后,我认为您说您从未见过 hyphenated query string in the wild 是对的。这通常是camelCase的时间。
根据这个问题,下划线不是一个有效的选项:stackoverflow.com/questions/3641722/…
你提到了流行的 API,我想补充一个:谷歌。据我所见,谷歌在单词之间根本没有使用任何东西(例如,检查谷歌地图距离矩阵 API)。

M
Mike Rylander

您应该在可抓取的 Web 应用程序 URL 中使用连字符。为什么?因为连字符分隔单词(以便搜索引擎可以索引单个单词),并且连字符不是 word character。下划线是一个单词字符,意味着它应该被视为单词的一部分。

在 Chrome 中双击:camelCase 在 Chrome 中双击:under_score 在 Chrome 中双击:连字符

看看 Chrome(我听说 Google 也制作了一个搜索引擎)如何只认为其中一个是两个词?

camelCaseunderscore 还要求用户使用 shift 键,而 hyphenated 不需要。

因此,如果您应该在可抓取的 Web 应用程序中使用连字符,为什么还要费心在 Intranet 应用程序中做一些不同的事情呢?少一件事要记住。


我在 Windows 7 上的 Firefox 24 认为“连字符”是两个词。
'under_score' 的行为相同。
queryString 的任何约定,例如 ?event_id=1?eventId=1???
@user2727195 尽管 URL 区分大小写,但最佳做法是尽可能使用小写字母,因为它消除了输入错误的可能性。
互动回答:)
A
Al Sweigart

REST API 的标准最佳实践是使用连字符,而不是驼峰式或下划线。

这来自 Oreilly 的 Mark Masse 的“REST API 设计规则手册”。

此外,请注意 Stack Overflow 本身在 URL 中使用连字符:.../hyphen-underscore-or-camelcase-as-word-delimiter-in-uris

与 WordPress 一样:http://inventwithpython.com/blog/2012/03/18/how-much-math-do-i-need-to-know-to-program-not-that-much-actually


如果您查看 REST API 设计规则手册中关于查询字符串指南的章节,您会注意到指南因规则部分而异。关于查询字符串中的大小写没有明确的规则,但您会发现查询字符串部分中的所有示例都使用驼峰式大小写。
仅供参考 - “REST API 设计规则手册”于 2011 年 10 月发布。在过去 8 年中,情况可能发生了变化。
j
johannchopin

虽然我建议使用连字符,但我还将假设一个不在您列表中的答案:

什么都没有

我公司的 API 有 /quotationrequests/、/purchaseorders/ 等 URI。

尽管您说它是一个 Intranet 应用程序,但您将 SEO 列为一项优势。对于 ?q=foo+bar 的查询,Google 确实匹配 URL 中的模式 /foobar/

我真的希望您不要像@ServAce85 建议的那样考虑对用户传递到地址栏的任意字符串执行 PHP 调用!


这种响应的不好之处在于,从 SEO 的角度来看,机器无法理解一个词的结尾和另一个词的开头,因此这些信息丢失了。对于人类读者来说也很难。有一些单词级别的分隔符总比没有好。
@AlSweigart SEO 不相关,因为这是登录墙后面的 Intranet 应用程序。
我同意@niel-mcguigan 的观点,即使这是一个 Intranet 应用程序,如果您在任何地方都使用连字符,那么要记住的事情就更少了。
@DrewGoodwin 够公平的。虽然请注意我说的是“假设”而不是“推荐”:-) 并且域中通常没有连字符,因此在路径中使用它们已经是另外一件需要记住的事情。
它还会在 IDE 中引发各种拼写错误,因为无法检查混搭的单词。一个小的挑剔可能但实际上拼错 REST 路由可能会导致错误,因此让拼写检查器工作实际上是一个很好的好处。
C
Community

简短的回答:

以连字符作为分隔符的小写单词

长答案:

URL 的目的是什么?

如果指向一个地址是答案,那么缩短的 URL 也可以很好地工作。如果我们不让它易于阅读和维护,它就不会帮助开发人员和维护人员。它们代表服务器上的一个实体,因此必须按逻辑命名。

Google recommends using hyphens

考虑在 URL 中使用标点符号。 URL http://www.example.com/green-dress.html 比 http://www.example.com/greendress.html 对我们有用得多。我们建议您在 URL 中使用连字符 (-) 而不是下划线 (_)。

来自编程背景,camelCase 是命名联合词的流行选择。

但是 RFC 3986 将 URL 定义为对 URL 的不同部分区分大小写。由于 URL 区分大小写,因此保持低调(小写)始终是安全的,并且被认为是一个很好的标准。现在这把骆驼箱从窗外拿出来了。

来源:https://metamug.com/article/rest-api-naming-best-practices.html#word-delimiters


c
cdeszaq

一般来说,它不会产生足够的影响,特别是因为它是一个 Intranet 应用程序,而不是一个通用的 Internet 应用程序。特别是,由于它是 Intranet,所以 SEO 不是问题,因为您的 Intranet 不应该被搜索引擎访问。 (如果是,它不是 Intranet 应用程序)。

任何值得一提的框架要么已经有默认的方法来做到这一点,要么很容易改变它处理多词 URL 组件的方式,所以我不会太担心。

也就是说,这就是我如何看待各种选项:

连字符

连字符的最大危险是相同的字符(通常)也用于减法和数字否定(即减号或负号)。

连字符在 URL 组件中感觉很尴尬。它们似乎只在 URL 末尾用于分隔文章标题中的单词才有意义。或者,例如,为了 SEO 和用户清晰目的而添加到 URL 末尾的 Stack Overflow 问题的标题。

下划线

同样,他们在 URL 组件中感觉不对。它们打破了 URL 的流程(和美观/简单),因为它们本质上在干净、流畅的 URL 中间添加了一个大而沉重的明显空间。

它们倾向于与下划线融为一体。如果您希望您的用户将您的 URL 复制粘贴到 MS Word 或其他类似的文本编辑程序中,或者任何其他可能获取 URL 并使用下划线设置样式的地方(就像传统上的链接一样),那么您可能想要避免使用下划线作为单词分隔符。特别是在打印时,带有下划线的带下划线的 URL 往往看起来像是有空格而不是下划线。

骆驼香烟盒

到目前为止,我最喜欢它,因为它使 URL 看起来更流畅,并且没有前两个选项的任何错误。

对于难以区分大写和小写的人来说可能会稍微难以阅读,但这在 URL 中应该不是什么大问题,因为大多数“单词”应该是 URL 组件并由 / 分隔无论如何。如果您发现您有一个超过 2 个“单词”长度的 URL 组件,您可能应该尝试为该概念找到一个更好的名称。

它确实存在区分大小写的问题,但大多数平台都可以调整为区分大小写或不区分大小写。任何这只是 2 种情况下的真正问题:a.) 人类输入 URL,b.) 程序员(因为我们不是人类)输入 URL。拼写错误总是一个问题,无论区分大小写,所以这是没有什么不同,所有一个案例。


不同意。看看 SO,看看所有的 wordpress 网站,看看大多数新闻网站,它们都使用连字符。驼峰式大小写也混合了大小写,在我看来,网络应该都是小写的。
在我看来,网络实际上应该不区分大小写。关于约定,如果您遵循 RoR (ruby on rails) 路线方法,您将使用下划线。通常,我这样做是为了在生成的路线和我的命名路线之间保持一致。尽管如此,我认为对我来说,破折号比下划线更好。
也许他们的 Intranet 中有一个内部搜索引擎?
不同意。你反对连字符的两个论点都是有缺陷的。否定或减法没有危险,因为我们在这里讨论的是元组的名称部分,您永远不应该为数学或否定计算或评估元组的名称部分。在 URI 中使用连字符也没有什么尴尬之处,因为它是一个长期存在的最佳实践,缺乏成熟的网站。它们也不需要按 Shift 键,几乎每个人都将它们视为单词边界。
据我所知,连字符一直是 URL 中大量使用的规范,并且在当今的标准中绝对被认为是最佳实践。不使用它们,因为感觉尴尬对我来说似乎很尴尬。
V
Vinicius Scheidegger

推荐使用spine-case(RFC3986强调),谷歌、PayPal等大公司都在使用。

来源:- https://blog.restcase.com/5-basic-rest-api-design-guidelines/

编辑:虽然 RFC 上的亮点无处可寻,但关于脊柱病例的建议仍然有效(正如其他答案中已经指出的那样)


在 RFC3986 中找不到重点 - 您能指出在哪个部分吗?
确实,我也找不到。
P
Peter Smith

我们应该在网页 URL 中使用连字符来说服搜索引擎分别索引 URL 中的每个关键字。


u
user2597538

这是两全其美的。

我也“喜欢”下划线,除了你对他们的所有积极点外,他们也有一定的老派风格。

所以我所做的是使用下划线并简单地在 Apache 的 .htaccess 文件中添加一个小的重写规则,以将所有下划线重写为连字符。

https://yoast.com/apache-rewrite-dash-underscore/


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅