连字符,下划线或驼峰作为URI中的单词定界符?


475

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


这是我最初的想法:

骆驼香烟盒

  • 如果服务器不区分大小写,则可能出现问题
  • 似乎在查询字符串键(相当广泛使用http://api.example.comSEARCHQUERY = ...),而不是在其他URI部分

连字号

  • 比其他替代品更美观
  • 似乎在URI的路径部分中被广泛使用
  • 在野外从未见过带连字符的查询字符串键
  • 对于SEO 可能更好(这可能是神话)

下划线

  • 编程语言可能更容易处理
  • 几个流行的API(Facebook,Netflix,StackExchange等)在URI的所有部分都使用下划线。

对于所有内容,我都倾向于强调。大多数大型参与者都在使用它们,这一事实令人信服(请参阅https://stackoverflow.com/a/608458/360570)。


根据我读过的所有内容,您应该使用连字符,但是下划线 似乎更易于管理。
ServAce85

1
我认为,连字符对于SEO而言一度更好。现在可能并非如此,但是有很多人采用了它,因此它被广泛接受为最佳实践。另一方面,在后端编程中,下划线可能更容易处理。我使用PHP,因此对函数名使用下划线要比连字符容易得多。 camelCase可能是最容易实现的,但阅读起来往往很困难。最后,当您说从未见过时,我认为您是对的hyphenated query string in the wild。通常,这是骆驼使用的时间。
ServAce85 2012年

根据这个问题,下划线不是有效的选择:stackoverflow.com/questions/3641722/…–
wytten


您提到了流行的API,我想添加一个:Google。据我所知,Google在单词之间完全不使用任何内容(例如,检查Google Maps Distance Matrix API)。
nbeuchat

Answers:


472

您应该在可爬网的Web应用程序URL中使用连字符。为什么?因为连字符分隔单词(以便搜索引擎可以为各个单词编制索引),所以它不是单词字符。下划线是单词字符,表示应将其视为单词的一部分。

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

看看Chrome浏览器(我听说Google也制造搜索引擎)怎么只认为其中之一就是两个字?

camelCase并且underscore还要求用户使用shift密钥,hyphenated而不需要。

因此,如果您应该在可爬网的Web应用程序中使用连字符,那么为什么还要在Intranet应用程序中麻烦一些呢?要少记住的一件事。


20
我在Windows 7上的Firefox 24认为“连字符”是两个词。
MarcelStör13年

9
它对于“ under_score”的行为相同。
MarcelStör13年

18
queryString的任何约定,例如?event_id=1?eventId=1???
user2727195 2015年

8
@ user2727195尽管URL区分大小写,但最佳实践是尽可能使用小写字母,因为这样可以消除错误输入的可能性。
Nicholas Shanks

7
互动答案:)
wild_nothing

210

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


3
如果查看REST API设计规则手册中有关查询字符串准则的章节,您会注意到准则根据规则部分而有所不同。关于查询字符串的大小写没有明确的规则,但是您会发现在查询字符串部分中的所有示例中,所有键都是驼峰式的。
Michael Lang

1
仅供参考-“ REST API设计规则手册”于2011年10月发布。在过去的8年中,情况可能发生了变化。
克里斯恩

25

推荐连字符的同时,我还将假定您未列出的答案:

一无所有

  • 我公司的API有喜欢的URI /quotationrequests//purchaseorders/等等。
  • 尽管您说这是Intranet应用程序,但您还是将SEO列为一项优势。Google确实匹配网址中的/ foobar /模式,以查询?q=foo+bar
  • 真的希望您不要考虑对用户传递到地址栏的任意字符串执行PHP调用,就像@ ServAce85建议的那样!

+1指出明显的选择。它还从/ quotation / requests /中消除了/ quotationrequests /的歧义。
Josh Petitt

33
从SEO角度来看,此响应的缺点是,机器无法理解一个单词的结尾和另一个单词的开头,因此该信息会丢失。对于人类读者而言,这也很困难。最好有一些单词级的分隔符,而不是什么都没有。
艾维格

3
@AlSweigart SEO无关紧要,因为这是登录墙后面的Intranet应用程序。
尼古拉斯·香克斯

2
我同意@ niel-mcguigan的观点,即使这是一个Intranet应用程序,但如果到处都使用连字符,那么要记住的事情就少了一点。
德鲁·古德温

2
@DrewGoodwin公平。尽管确实要注意,我说的是“假设”而不是“推荐” :-)而且域中通常没有连字符,所以在路径中使用它们已经是一件需要记住的事情了。
尼古拉斯·香克斯

18

通常,它不会产生太大的影响,尤其是因为它是Intranet应用程序,而不是通用Internet应用程序。尤其是,由于它是Intranet,因此不必担心SEO,因为您的Intranet不能被搜索引擎访问。(如果是,则它不是Intranet应用程序)。

而且任何值得考虑的框架要么已经具有执行此操作的默认方法,要么很容易更改它处理多单词URL组件的方式,因此我不必担心太多。

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

连字号

  • 连字符的最大危险是相同的字符(通常)也用于减法和数字求反(即减号负号)。
  • URL组件中的连字符感到尴尬。它们似乎仅在URL的末尾有意义,以分隔文章标题中的单词。或者,例如,出于SEO和用户声明目的,添加到URL末尾的Stack Overflow问题的标题。

下划线

  • 同样,它们在URL组件中感觉不对。它们破坏了URL的流(和美观/简洁),因为它们本质上在干净,流动的URL中间添加了一个很大的笨重的表观空间。
  • 它们倾向于与下划线融合。如果您希望用户将您的URL复制粘贴到MS Word或其他类似的文本编辑程序中,或者将其粘贴到URL上并用下划线标记样式的其他任何地方(如传统上的链接一样),那么您可能想要避免使用下划线作为单词分隔符。尤其是在打印时,带有下划线的带下划线的URL看起来好像带有空格而不是下划线。

骆驼香烟盒

  • 到目前为止,我最喜欢的是,因为它使URL看起来更好,并且没有前两个选项所具有的任何缺点。
  • 对于难以区分大写和小写字母的人而言,阅读起来可能会有点困难,但这在URL中应该不是什么大问题,因为大多数“单词”应该是URL组件,并且/无论如何都要分隔。如果发现URL组件的长度超过2个“单词”,则应该尝试为该概念找到一个更好的名称。
  • 确实存在区分大小写的问题,但是大多数平台都可以调整为区分大小写或不区分大小写。在2种情况下,这实际上只是一个问题:a。)人类在其中键入URL,以及b。)程序员(由于我们不是人类,在其中键入URL)。Typos 总是一个问题,无论是否区分大小写,所以这是与所有情况一样。

13
不同意。看这样,看所有的wordpress网站,看大多数新闻网站,它们都使用连字符。另外骆驼案和案件,我认为网络应全部为小写。
法比安·沃妮兹

4
我认为,网络实际上应该不区分大小写。根据约定,如果您遵循RoR(铁路上的红宝石)路线方法,则应使用下划线。通常,我这样做是为了使其在Rails生成的路线和命名的路线之间保持一致。不过,我认为破折号对我来说比下划线要好。
rpbaltazar 2015年

1
也许他们的Intranet中有一个内部搜索引擎?
Juha Untinen '16

3
不同意。您对连字符的两种说法都是有缺陷的。取反或减法没有任何危险,因为我们在这里讨论的是元组的名称部分,您绝对不应该为数学或取反来运行或评估元组的名称部分。在URI中使用连字符也没有任何尴尬,因为这是缺乏完善站点的长期最佳实践。它们也不需要按Shift键,几乎每个人都将其视为单词边界。
tpartee '02

2
据我所知,连字符是URL中使用最广泛的规范,在当今的标准中,绝对将其视为最佳实践。不使用它们,因为感觉尴尬对我来说似乎很尴尬。
手枪-皮特

2

简短答案:

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

长答案:

URL的目的是什么?

如果指向地址是答案,那么缩短的URL也会做得很好。如果我们不易于阅读和维护,那么它对开发人员和维护人员都将无济于事。它们代表服务器上的实体,因此必须在逻辑上进行命名。

Google建议使用连字符

考虑在网址中使用标点符号。该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


-1

这是两全其美。

我也“喜欢”强调,除了您对它们的所有正面评价外,它们还具有某种古老的风格。

因此,我要做的是使用下划线,只需在Apache的.htaccess文件中添加一个小的重写规则,即可将所有下划线重新编写为连字符。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.