Trattino, trattino basso o camelCase come delimitatore di parole negli URI?


477

Sto progettando un'API basata su HTTP per un'app Intranet. Mi rendo conto che è una preoccupazione piuttosto piccola nel grande schema delle cose, ma: dovrei usare trattini, trattini bassi o camelCase per delimitare le parole negli URI?


Ecco i miei pensieri iniziali:

camelCase

  • possibili problemi se il server non fa distinzione tra maiuscole e minuscole
  • sembra avere un uso abbastanza diffuso nelle chiavi della stringa di query ( http://api.example.com ? searchQuery = ...), ma non in altre parti dell'URI

Trattino

  • più esteticamente piacevole rispetto alle altre alternative
  • sembra essere ampiamente usato nella parte del percorso dell'URI
  • mai visto chiave di stringa di query sillabata in natura
  • forse meglio per il SEO (questo potrebbe essere un mito)

Sottolineare

  • potenzialmente più facile da gestire per i linguaggi di programmazione
  • diverse API popolari (Facebook, Netflix, StackExchange, ecc.) utilizzano i caratteri di sottolineatura in tutte le parti dell'URI.

Sono incline a sottolineare per tutto. Il fatto che la maggior parte dei grandi giocatori li stia utilizzando è avvincente (vedi https://stackoverflow.com/a/608458/360570 ).


Da tutto quello che ho letto, dovresti usare trattini , ma i trattini bassi sembrano più facili da gestire.
ServAce85,

1
Credo che i trattini fossero, una volta, migliori per scopi SEO. Questo potrebbe non essere vero ora, ma così tante persone l'hanno adottato che è più ampiamente accettato come migliore pratica. D'altra parte, le sottolineature potrebbero essere più facili da gestire nella programmazione back-end. Uso PHP, quindi è molto più facile usare un trattino basso per un nome di funzione che un trattino. camelCase può essere il più facile da implementare, ma leggerlo spesso è difficile. Infine, penso che avessi ragione quando hai detto che non hai mai visto un hyphenated query string in the wild. Questo è in genere un momento per camelCase.
ServAce85,

In base a questa domanda, non di sottolineatura è un'opzione valida: stackoverflow.com/questions/3641722/...
wytten


Hai citato le API popolari, vorrei aggiungerne una: Google. Per quanto ho visto, Google non usa nulla tra le parole (controlla l'API Matrix di Google Maps Distance per esempio).
Nbeuchat,

Risposte:


473

È necessario utilizzare trattini in un URL di applicazione Web di cui è possibile eseguire la scansione. Perché? Perché il trattino separa le parole (in modo che un motore di ricerca possa indicizzare le singole parole) e non è un carattere di parola . Il carattere di sottolineatura è un carattere di parola, nel senso che dovrebbe essere considerato parte di una parola.

Fai
doppio clic su Chrome: camelCase Fai doppio clic su Chrome: under_score Fai
doppio clic su Chrome: trattino

Vedi come Chrome (ho sentito che anche Google crea un motore di ricerca) pensa che una di queste sia solo due parole?

camelCasee underscorerichiede anche all'utente di utilizzare la shiftchiave, mentre hyphenatednon lo fa.

Quindi, se dovessi usare trattini in un'applicazione web a scorrimento, perché dovresti preoccuparti di fare qualcosa di diverso in un'applicazione intranet? Una cosa in meno da ricordare.


20
Il mio Firefox 24 su Windows 7 pensa che "trattino" è di due parole.
Marcel Stör,

9
e si comporta allo stesso modo per 'under_score'.
Marcel Stör,

18
qualsiasi convenzione per queryString, ad esempio ?event_id=1o ?eventId=1???
user2727195,

8
@ user2727195 Sebbene gli URL facciano distinzione tra maiuscole e minuscole, è consigliabile utilizzare le lettere minuscole laddove possibile, in quanto elimina la possibilità di errori di digitazione.
Nicholas Shanks,

7
Risposta interattiva :)
wild_nothing

210

La best practice standard per le API REST è avere un trattino , non un camelcase o un trattino basso.

Questo deriva dal "Rulebook Design Rulebook" di Mark Masse di Oreilly.

Inoltre, tieni presente che Stack Overflow stesso utilizza trattini nell'URL: .../hyphen-underscore-or-camelcase-as-word-delimiter-in-uris

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


3
Se guardi il capitolo sulle linee guida per le stringhe di query nel Rulebook di progettazione API REST, noterai che le linee guida variano in base alla parte della regola. Non esiste una regola esplicita sull'involucro nelle stringhe di query, ma troverai tutti gli esempi nella sezione sulle stringhe di query che tutte le chiavi sono nel caso del cammello.
Michael Lang,

1
Cordiali saluti - Il "Rulebook Design Rulebook" è stato pubblicato nell'ottobre 2011. È possibile che le cose siano cambiate negli ultimi 8 anni.
ChrisN,

25

Mentre raccomando trattini, postulo anche una risposta che non è nella tua lista:

Niente di niente

  • API della mia azienda ha URI come /quotationrequests/, /purchaseorders/e così via.
  • Nonostante tu abbia detto che era un'app Intranet, hai elencato la SEO come un vantaggio. Google corrisponde al modello / foobar / in un URL per una query di?q=foo+bar
  • Io veramente spero che non si considera l'esecuzione di una chiamata PHP per qualsiasi stringa arbitraria l'utente passa alla barra degli indirizzi, come @ ServAce85 suggerisce!

+1 per indicare una scelta ovvia. Inoltre chiarisce / richieste di preventivo / da / preventivo / richieste /.
Josh Petitt,

34
La cosa negativa di questa risposta è che, dal punto di vista SEO, non c'è modo per una macchina di capire dove finisce una parola e inizia un'altra, quindi questa informazione viene persa. È anche difficile per i lettori umani. È meglio avere dei separatori a livello di parola che niente.
Al Sweigart,

3
@AlSweigart SEO non è rilevante in quanto si tratta di un'applicazione intranet dietro un muro di accesso.
Nicholas Shanks,

2
Concordo con @ niel-mcguigan sul fatto che, sebbene si tratti di un'app Intranet, se si utilizzano trattini ovunque è una cosa in meno da ricordare.
Ha disegnato Goodwin il

2
@DrewGoodwin Abbastanza giusto. Sebbene noti che ho detto "postulato" non "raccomandare" :-) E i domini di solito non hanno trattini in loro, quindi usarli nei percorsi è già un'altra cosa da ricordare.
Nicholas Shanks,

18

In generale, non avrà abbastanza impatto di cui preoccuparsi, soprattutto perché è un'app Intranet e non un'app Internet di uso generale. In particolare, dal momento che è intranet , SEO non è un problema, dal momento che la tua intranet non dovrebbe essere accessibile ai motori di ricerca. (e se lo è, non è un'app Intranet).

E qualsiasi framework degno di nota ha già un modo predefinito per farlo, oppure è abbastanza facile cambiare il modo in cui gestisce i componenti URL a più parole, quindi non me ne preoccuperei troppo.

Detto questo, ecco come vedo le varie opzioni:

Trattino

  • Il più grande pericolo per i trattini è che lo stesso carattere (tipicamente) sia usato anche per sottrazione e negazione numerica (es. Meno o negativo ).
  • I trattini si sentono scomodi nei componenti URL. Sembrano avere senso solo alla fine di un URL per separare le parole nel titolo di un articolo. O, ad esempio, il titolo di una domanda Stack Overflow che viene aggiunta alla fine di un URL per scopi SEO e di chiarezza dell'utente.

Sottolineare

  • Ancora una volta, si sentono in errore nei componenti URL. Interrompono il flusso (e la bellezza / semplicità) di un URL, poiché essenzialmente aggiungono uno spazio apparente grande e pesante nel mezzo di un URL pulito e scorrevole.
  • Tendono a fondersi con sottolineature. Se ti aspetti che i tuoi utenti copino e incollino i tuoi URL in MS Word o altri programmi di modifica del testo simili, o in qualsiasi altro luogo che potrebbe captare un URL e modellarlo con una sottolineatura (come tradizionalmente sono i link ), allora potresti voler evitare i trattini bassi come separatori di parole. Soprattutto quando viene stampato, un URL sottolineato con caratteri di sottolineatura tende a sembrare che abbia spazi al posto dei caratteri di sottolineatura.

CamelCase

  • Di gran lunga il mio preferito, dal momento che fa sembrare che gli URL scorrano meglio e non presenta alcun difetto delle due opzioni precedenti.
  • Può essere un po ' più difficile da leggere per le persone che hanno difficoltà a distinguere maiuscole da minuscole, ma questo non dovrebbe essere molto più di un problema in un URL, perché la maggior parte "parole" dovrebbero essere i componenti di URL e separati da un /comunque . Se scopri di avere un componente URL che è più lungo di 2 "parole", probabilmente dovresti cercare di trovare un nome migliore per quel concetto.
  • Esso ha un problema possibile con sensibilità caso, ma maggior parte delle piattaforme può essere regolata per essere una o case-insensitive-sensitive. Qualunque sia davvero un problema per 2 casi: a.) Umani che digitano l'URL, e b.) Programmatori (poiché non siamo umani) che digitano l'URL. I Typos sono sempre un problema, indipendentemente dalla distinzione tra maiuscole e minuscole, quindi questo è non diverso da tutto un caso.

13
Disaccordo. Guarda SO, guarda tutti i siti wordpress, guarda la maggior parte dei siti di notizie, usano tutti trattini. Anche il caso del cammello mescola i casi, il web dovrebbe essere tutto minuscolo secondo me.
Fabien Warniez,

4
A mio avviso, il web dovrebbe essere insensibile alle maiuscole, in realtà. Per quanto riguarda la convenzione, se segui l'approccio delle rotte RoR (ruby on rails), utilizzeresti il ​​trattino basso. Di solito, lo faccio per mantenerlo coerente su tutti i percorsi generati dalle rotaie e sui miei percorsi con nome. Tuttavia, ritengo che per me trattino meglio di sottolineature.
rpbaltazar,

1
Forse hanno un motore di ricerca interno nella loro intranet?
Juha Untinen,

3
Disaccordo. Entrambi i tuoi argomenti contro i trattini sono errati. Non c'è pericolo di negazione o sottrazione perché qui stiamo parlando della porzione del nome di una tupla, non dovresti mai funzionare o valutare la parte del nome di una tupla per la matematica o la negazione. Non c'è nulla di imbarazzante nell'utilizzare i trattini negli URI in quanto è una buona pratica di vecchia data utilizzata da una carenza di siti ben consolidati. Inoltre, non richiedono di premere il tasto Maiusc e vengono trattati come limiti di parole praticamente da tutti.
tpartee

2
Per quanto posso ricordare, i trattini sono stati la norma ampiamente utilizzata negli URL ed è sicuramente considerata la migliore pratica negli standard di oggi. Non usarli perché la sensazione imbarazzante mi sembra imbarazzante.
pistola-pete

2

Risposta breve:

parole minuscole con un trattino come separatore

Risposta lunga:

Qual è lo scopo di un URL?

Se la risposta è puntare a un indirizzo, anche un URL abbreviato sta facendo un buon lavoro. Se non semplifichiamo la lettura e la manutenzione, non aiuterebbe sviluppatori e manutentori. Rappresentano un'entità sul server, quindi devono essere denominati logicamente.

Google consiglia di utilizzare trattini

Prendi in considerazione l'utilizzo della punteggiatura nei tuoi URL. L'URL http://www.example.com/green-dress.html ci è molto più utile di http://www.example.com/greendress.html . Ti consigliamo di utilizzare trattini (-) invece di trattini bassi (_) nei tuoi URL.

Proveniente da un background di programmazione, camelCase è una scelta popolare per la denominazione di parole comuni.

Ma RFC 3986 definisce gli URL con distinzione tra maiuscole e minuscole per le diverse parti dell'URL. Dal momento che gli URL fanno distinzione tra maiuscole e minuscole, tenerlo basso (maiuscolo) è sempre sicuro e considerato un buon standard. Ora questo prende un caso di cammello fuori dalla finestra.

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


-1

ecco il meglio di entrambi i mondi.

Mi piace anche "sottolineare", oltre a tutti i tuoi punti positivi su di loro, c'è anche un certo stile vecchio stile per loro.

Quindi quello che faccio è usare i trattini bassi e semplicemente aggiungere una piccola regola di riscrittura al file .htaccess di Apache per riscrivere tutti i trattini bassi nei trattini.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.