Guión, guión bajo o camelCase como delimitador de palabras en los URI?

477

Estoy diseñando una API basada en HTTP para una aplicación de intranet. Me doy cuenta de que es una preocupación bastante pequeña en el gran esquema de las cosas, pero: ¿debo usar guiones, guiones bajos o camelCase para delimitar palabras en los URI?


Aquí están mis pensamientos iniciales:

el caso de Carmel

  • posibles problemas si el servidor no distingue entre mayúsculas y minúsculas
  • parece tener un uso bastante extendido en las claves de cadena de consulta ( http://api.example.com ? searchQuery = ...), pero no en otras partes de URI

Guión

  • más estéticamente agradable que las otras alternativas
  • parece ser ampliamente utilizado en la porción de ruta de la URI
  • clave de cadena de consulta con guión nunca vista en estado salvaje
  • posiblemente mejor para SEO (esto puede ser un mito)

Guion bajo

  • potencialmente más fácil de manejar para los lenguajes de programación
  • varias API populares (Facebook, Netflix, StackExchange, etc.) utilizan guiones bajos en todas las partes del URI.

Me estoy inclinando hacia guiones bajos para todo. El hecho de que la mayoría de los grandes jugadores los estén usando es convincente (ver https://stackoverflow.com/a/608458/360570 ).

Josh Johnson
fuente
De todo lo que he leído, deberías usar guiones , pero los guiones bajos parecen más fáciles de manejar.
ServAce85
1
Creo que los guiones fueron, en algún momento, mejores para fines de SEO. Esto puede no ser cierto ahora, pero tantas personas lo han adoptado que es más ampliamente aceptado como la mejor práctica. Los guiones bajos, por otro lado, pueden ser más fáciles de manejar en la programación de back-end. Yo uso PHP, por lo que es mucho más fácil usar un guión bajo para el nombre de una función que un guión. camelCase puede ser el más fácil de implementar, pero leerlo a menudo es difícil. Finalmente, creo que tenías razón cuando dijiste que nunca ves a hyphenated query string in the wild. Ese suele ser un momento para camelCase.
ServAce85
Según esta pregunta, el guión bajo no es una opción válida: stackoverflow.com/questions/3641722/…
wytten
Menciona las API populares, me gustaría agregar una: Google. Hasta donde he visto, Google no usa nada entre las palabras (consulte la API de matriz de distancia de Google Maps, por ejemplo).
nbeuchat

Respuestas:

473

Debe usar guiones en una URL de aplicación web rastreable. ¿Por qué? Porque el guión separa las palabras (para que un motor de búsqueda pueda indexar las palabras individuales), y no es un carácter de palabra . El subrayado es un carácter de palabra, lo que significa que debe considerarse parte de una palabra.

Haga doble clic en Chrome: camelCase Haga
doble clic en Chrome: under_score Haga
doble clic en Chrome: guión

¿Ves cómo Chrome (escucho que Google también hace un motor de búsqueda) solo piensa que una de esas son dos palabras?

camelCasey underscoretambién requiere que el usuario use la shiftclave, mientras hyphenatedque no lo hace.

Entonces, si debe usar guiones en una aplicación web rastreable, ¿por qué molestarse en hacer algo diferente en una aplicación de intranet? Una cosa menos para recordar.

Neil McGuigan
fuente
20
Mi Firefox 24 en Windows 7 piensa que 'guión' es dos palabras.
Marcel Stör
99
y se comporta igual para 'under_score'.
Marcel Stör
18
¿alguna convención para queryString, por ejemplo ?event_id=1o ?eventId=1???
usuario2727195
8
@ user2727195 Aunque las URL distinguen entre mayúsculas y minúsculas, la mejor práctica es utilizar minúsculas siempre que sea posible, ya que elimina la posibilidad de escribir mal.
Nicholas Shanks
77
Respuesta interactiva :)
wild_nothing
210

La mejor práctica estándar para las API REST es tener un guión , no camelcase o guiones bajos.

Esto viene del "Libro de reglas de diseño API REST" de Mark Masse de Oreilly.

Además, tenga en cuenta que Stack Overflow utiliza guiones en la URL: .../hyphen-underscore-or-camelcase-as-word-delimiter-in-uris

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

Al Sweigart
fuente
3
Si mira el capítulo sobre pautas de cadena de consulta en el Libro de reglas de diseño de API REST, notará que las pautas varían según la parte de la regla. No existe una regla explícita sobre el uso de mayúsculas y minúsculas en las cadenas de consulta, pero encontrará que todos los ejemplos en la sección sobre cadenas de consulta indican que todas las claves están en mayúsculas y minúsculas.
Michael Lang
1
Solo para su información: el "Libro de reglas de diseño API REST" se publicó en octubre de 2011. Es posible que las cosas hayan cambiado en los últimos 8 años.
ChrisN
25

Si bien recomiendo guiones, también postularé una respuesta que no está en su lista:

Nada en absoluto

  • El API de mi empresa tiene URI como /quotationrequests/, /purchaseorders/y así sucesivamente.
  • A pesar de que dijiste que era una aplicación de intranet, incluiste el SEO como un beneficio. Google coincide con el patrón / foobar / en una URL para una consulta de?q=foo+bar
  • Yo realmente espero que no tienen en cuenta la ejecución de una llamada PHP para cualquier cadena arbitraria que el usuario pasa en la barra de direcciones, como sugiere ServAce85 @!
Nicholas Shanks
fuente
+1 por señalar una elección obvia. También desambigua / quotationrequests / from / quote / request /.
Josh Petitt
34
Lo malo de esta respuesta es que, desde una perspectiva de SEO, no hay forma de que una máquina entienda dónde termina una palabra y comienza otra, por lo que esta información se pierde. También es difícil para los lectores humanos. Es mejor tener algunos separadores de nivel de palabra que nada.
Al Sweigart
3
@AlSweigart SEO no es relevante ya que esta es una aplicación de intranet detrás de un muro de inicio de sesión.
Nicholas Shanks
2
Estoy de acuerdo con @ niel-mcguigan en que, aunque se trata de una aplicación de intranet, si usa guiones en todas partes, es una cosa menos para recordar.
Drew Goodwin
2
@DrewGoodwin Feria suficiente. Aunque tenga en cuenta que dije "postular" no "recomendar" :-) Y los dominios generalmente no tienen guiones, por lo que usarlos en las rutas ya es algo más para recordar.
Nicholas Shanks
18

En general, no tendrá el impacto suficiente como para preocuparse, particularmente porque es una aplicación de intranet y no una aplicación de Internet de uso general. En particular, dado que es intranet , el SEO no es una preocupación, ya que su intranet no debería ser accesible para los motores de búsqueda. (y si lo es, no es una aplicación de intranet).

Y cualquier marco que valga la pena ya sea una forma predeterminada de hacer esto, o es bastante fácil cambiar la forma en que trata los componentes de URL de varias palabras, por lo que no me preocuparía demasiado.

Dicho esto, así es como veo las diversas opciones:

Guión

  • El mayor peligro para los guiones es que el mismo carácter (típicamente) también se usa para la resta y la negación numérica (es decir, menos o negativo ).
  • Los guiones se sienten incómodos en los componentes de URL. Parecen tener sentido al final de una URL para separar palabras en el título de un artículo. O, por ejemplo, el título de una pregunta de desbordamiento de pila que se agrega al final de una URL para fines de SEO y claridad del usuario.

Guion bajo

  • Nuevamente, se sienten mal en los componentes de URL. Rompen el flujo (y la belleza / simplicidad) de una URL, ya que esencialmente agregan un espacio aparente grande y pesado en el medio de una URL limpia y fluida.
  • Tienden a mezclarse con subrayados. Si espera que sus usuarios copien y peguen sus URL en MS Word u otros programas similares de edición de texto, o en cualquier otro lugar que pueda recoger una URL y diseñarla con un subrayado (como los enlaces son tradicionalmente ), entonces es posible que desee evite los guiones bajos como separadores de palabras. Particularmente cuando se imprime, una URL subrayada con guiones bajos tiende a verse como si tuviera espacios en lugar de guiones bajos.

El caso de Carmel

  • Con mucho, mi favorito, ya que hace que las URL parezcan fluir mejor y no tiene ninguna de las fallas que tienen las dos opciones anteriores.
  • Puede ser un poco más difícil de leer para las personas que tienen dificultades para diferenciar entre mayúsculas y minúsculas, pero esto no debería ser un gran problema en una URL, porque la mayoría de las "palabras" deberían ser componentes de URL y estar separadas por un/ de todos modos . Si encuentra que tiene un componente de URL que tiene más de 2 "palabras" de largo, probablemente debería intentar encontrar un mejor nombre para ese concepto.
  • Se hace tener un posible problema con mayúsculas y minúsculas, pero la mayoría de las plataformas puede ser ajustado para ser mayúsculas y minúsculas o mayúsculas y minúsculas. Cualquiera es realmente un problema para 2 casos: a.) Humanos escribiendo la URL, y b.) Programadores (ya que no somos humanos) escribiendo la URL. Los errores tipográficos siempre son un problema, independientemente de la distinción entre mayúsculas y minúsculas, así que esto es No es diferente que todos los casos.
cdeszaq
fuente
13
Discrepar. Mire SO, mire todos los sitios de WordPress, mire la mayoría de los sitios de noticias, todos usan guiones. También casos de camello mezcla casos, la web debería ser todo minúscula en mi opinión.
Fabien Warniez
44
En mi opinión, la web debería ser insensible a mayúsculas y minúsculas, en realidad. Con respecto a la convención, si sigue el enfoque de rutas RoR (ruby on rails), usaría guiones bajos. Por lo general, lo hago para mantener la coherencia entre las rutas generadas por los rieles y mis rutas con nombre. Sin embargo, creo que para mí la lectura de guiones es mejor que los guiones bajos.
rpbaltazar
1
¿Quizás tienen un motor de búsqueda interno en su intranet?
Juha Untinen
3
Discrepar. Sus dos argumentos contra los guiones son defectuosos. No hay peligro de negación o sustracción porque estamos hablando de la parte del nombre de una tupla aquí, nunca deberías estar funcionando o evaluando la parte del nombre de una tupla para matemáticas o negación. Tampoco hay nada extraño en el uso de guiones en los URI, ya que es una práctica recomendada de larga data utilizada por la escasez de sitios bien establecidos. Tampoco requieren presionar la tecla Mayús y prácticamente todos los tratan como límites de palabras.
tpartee
2
Hasta donde puedo recordar, los guiones han sido la norma más utilizada en las URL, y definitivamente se considera la mejor práctica en los estándares actuales. No usarlos porque la sensación incómoda me parece incómoda.
pistola-pete
2

Respuesta corta:

palabras en minúsculas con un guión como separador

Respuesta larga:

¿Cuál es el propósito de una URL?

Si apuntar a una dirección es la respuesta, entonces una URL acortada también está haciendo un buen trabajo. Si no lo hacemos fácil de leer y mantener, no ayudará a los desarrolladores y mantenedores por igual. Representan una entidad en el servidor, por lo que deben nombrarse lógicamente.

Google recomienda usar guiones

Considere utilizar la puntuación en sus URL. La URL http://www.example.com/green-dress.html es mucho más útil para nosotros que http://www.example.com/greendress.html . Recomendamos que utilice guiones (-) en lugar de guiones bajos (_) en sus URL.

Viniendo de un fondo de programación, camelCase es una opción popular para nombrar palabras conjuntas.

Pero RFC 3986 define las URL como sensibles a mayúsculas y minúsculas para diferentes partes de la URL. Dado que las URL distinguen entre mayúsculas y minúsculas, mantenerlas discretas (en minúsculas) siempre es seguro y se considera un buen estándar. Ahora que saca un caso de camello por la ventana.

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

Clasificador
fuente
-1

Aquí está lo mejor de ambos mundos.

También me gusta "subrayar", además de todos sus puntos positivos sobre ellos, también hay un cierto estilo de la vieja escuela para ellos.

Entonces, lo que hago es usar guiones bajos y simplemente agregar una pequeña regla de reescritura al archivo .htaccess de Apache para volver a escribir todos los guiones bajos en guiones.

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

usuario2597538
fuente