连字符,下划线或camelCase作为URI中的单词分隔符?

时间:2012-04-24 16:37:35

标签: api url rest uri restful-url

我正在为Intranet应用程序设计基于HTTP的API。我意识到这是一个非常小的关注事项,但是:我应该使用连字符,下划线或camelCase来分隔URI中的单词吗?


以下是我最初的想法:

驼峰

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

连字符

  • 比其他选择更美观;
  • 似乎广泛用于URI的路径部分
  • 从未在野外看到带连字符的查询字符串键
  • 可能更适合SEO(这可能是一个神话)

下划线

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

我倾向于强调一切。大多数大玩家都在使用它们这一事实令人信服(见https://stackoverflow.com/a/608458/360570)。

6 个答案:

答案 0 :(得分:376)

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

在Chrome中双击它:camelCase
在Chrome中双击它:under_score
在Chrome中双击这个:连字符

了解Chrome(我听说谷歌也是一个搜索引擎)只认为其中一个是两个字?

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

因此,如果您应该在可爬网Web应用程序中使用连字符,为什么还要在Intranet应用程序中执行不同的操作?少记一点。

答案 1 :(得分:159)

REST API的标准最佳做法是使用连字符,而不是camelcase或下划线。

这来自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

答案 2 :(得分:25)

虽然我推荐连字符,我也会假设你的名单上没有答案:

一无所有

  • 我公司的API包含/quotationrequests//purchaseorders/等URI。
  • 尽管你说它是一个内联网应用程序,但你列出了SEO作为一种好处。 Google确实匹配?q=foo+bar
  • 查询的网址格式/ foobar /
  • 真的希望你不要考虑对用户传递到地址栏的任意字符串执行PHP调用,正如@ ServAce85建议的那样!

答案 3 :(得分:16)

一般情况下,担心不会产生足够的影响,特别是因为它是 intranet 应用程序,而不是通用的Internet应用程序。特别是,由于它是 intranet ,SEO不是一个问题,因为搜索引擎不应该访问您的内部网。 (如果是,则不是内联网应用程序。)

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

那就是说,这就是我看到各种选择的方式:

连字符

  • 连字符的最大危险是相同的字符(通常)也用于减法和数字否定(即减去否定)。
  • Hyphens 感觉在网址组件中尴尬。它们似乎只在URL的末尾有意义,以分隔文章标题中的单词。或者,例如,为了SEO和用户清晰度目的而添加到URL末尾的Stack Overflow问题的标题。

下划线

  • 同样,他们在网址组件中感到错误。它们打破了URL的流程(以及美观/简单),因为它们实际上在干净,流畅的URL中间添加了一个巨大而明显的空间。
  • 他们倾向于与下划线融为一体。如果您希望您的用户将您的网址复制粘贴到MS Word或其他类似的文字编辑程序中,或者其他任何可能会在网址上搜索并使用下划线标注其样式(例如链接传统) ),那么您可能希望避免使用下划线作为单词分隔符。特别是在打印时,带下划线的带下划线的URL往往看起来像是空格而不是下划线。

CamelCase

  • 到目前为止,我最喜欢的,因为它使URL似乎更好地流动,并且没有前两个选项所做的任何错误。
  • 对于那些难以区分大写和小写的人来说,稍微可能会更难阅读,但这在URL中不应该是一个问题,因为大多数“单词” “应该是网址组件,并以/分隔。如果您发现您的网址组件长度超过2个“字”,那么您应该尝试为该概念找到更好的名称。
  • 可能存在区分大小写的问题,但大多数平台可以调整为区分大小写或不区分大小写。任何它只是真的 2个案例的问题:a。)人类输入URL,和b。)程序员(因为我们不是人类)键入URL。错别字总是< / em>一个问题,无论区分大小写,所以这与所有情况都没有区别。

答案 4 :(得分:9)

简短答案:

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

长答案:

URL的用途是什么?

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

Google recommends using hyphens

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

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

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

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

答案 5 :(得分:0)

这两个世界都是最好的。

我也是&#34;喜欢&#34;强调,除了你对他们的所有积极观点外,还有一种老式的风格。

所以我所做的就是使用下划线,只需在Apache的.htaccess文件中添加一个小的重写规则,将所有下划线重新写入连字符。

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