Łącznik, podkreślenie lub camelCase jako separator słów w URI?


475

Projektuję oparty na HTTP interfejs API dla aplikacji intranetowej. Zdaję sobie sprawę, że jest to niewielki problem w wielkim schemacie rzeczy, ale: czy powinienem używać łączników, znaków podkreślenia lub camelCase do ograniczania słów w identyfikatorach URI?


Oto moje początkowe przemyślenia:

camelCase

  • możliwe problemy, jeśli serwer nie rozróżnia wielkości liter
  • wydaje się, że ma dość powszechne zastosowanie w kluczach ciągu zapytania ( http://api.example.com ? searchQuery = ...), ale nie w innych częściach URI

Łącznik

  • bardziej estetycznie niż inne alternatywy
  • wydaje się być szeroko stosowany w części ścieżki URI
  • nigdy nie widziałem klucza ciągu zapytania z łącznikiem w stanie dzikim
  • być może lepiej dla SEO (może to być mit)

Podkreślać

  • potencjalnie łatwiejsze w obsłudze języki programowania
  • kilka popularnych interfejsów API (Facebook, Netflix, StackExchange itp.) używa podkreślników we wszystkich częściach identyfikatora URI.

Skłaniam się do podkreślenia wszystkiego. Fakt, że większość dużych graczy z nich korzysta, jest przekonujący (patrz https://stackoverflow.com/a/608458/360570 ).


Ze wszystkiego, co przeczytałem, powinieneś używać łączników , ale podkreślenia wydają się łatwiejsze do zarządzania.
ServAce85

1
Uważam, że łączniki były kiedyś lepsze do celów SEO. To może teraz nie być prawda, ale tak wiele osób przyjęło ją, że jest ona powszechnie akceptowana jako najlepsza praktyka. Z drugiej strony podkreślenia mogą być łatwiejsze w programowaniu zaplecza. Używam PHP, więc o wiele łatwiej jest używać podkreślenia dla nazwy funkcji niż myślnika. camelCase może być najłatwiejszy do wdrożenia, ale jego czytanie jest często trudne. Wreszcie myślę, że miałeś rację, kiedy powiedziałeś, że nigdy nie widzisz hyphenated query string in the wild. Zazwyczaj jest to czas na camelCase.
ServAce85

Zgodnie z tym pytaniem podkreślenie nie jest prawidłową opcją: stackoverflow.com/questions/3641722/...
wytten


Wspominasz popularne interfejsy API, chciałbym dodać jeden: Google. O ile widziałem, Google w ogóle nie używa między słowami (sprawdź na przykład interfejs API Google Maps Distance Matrix).
nbeuchat

Odpowiedzi:


472

W indeksowanym adresie URL aplikacji internetowej należy używać łączników. Dlaczego? Ponieważ myślnik oddziela słowa (aby wyszukiwarka mogła indeksować poszczególne słowa), a nie jest słowem . Podkreślenie to znak słowny, co oznacza, że ​​należy go traktować jako część słowa.

Kliknij dwukrotnie w Chrome: camelCase
Kliknij dwukrotnie w Chrome: under_score
Kliknij dwukrotnie w Chrome: dzielenie wyrazów

Widzisz, jak Chrome (słyszę, że Google również tworzy wyszukiwarkę) uważa, że ​​tylko jedno z tych słów to dwa słowa?

camelCasea underscoretakże wymagać od użytkownika użycia shiftklucza, podczas hyphenatedgdy nie.

Więc jeśli miałbyś używać łączników w przeszukiwalnej aplikacji internetowej, dlaczego miałbyś zawracać sobie głowę robieniem czegoś innego w aplikacji intranetowej? Jeszcze jedna rzecz do zapamiętania.


20
Mój Firefox 24 w systemie Windows 7 uważa, że ​​„dzielony łącznik” to dwa słowa.
Marcel Stör

9
i zachowuje się tak samo dla „under_score”.
Marcel Stör

18
dowolna konwencja dla queryString, na przykład ?event_id=1lub ?eventId=1???
user2727195,

8
@ user2727195 Mimo że w adresach URL rozróżniana jest wielkość liter, najlepszą praktyką jest stosowanie małych liter wszędzie tam, gdzie to możliwe, ponieważ eliminuje to możliwość pomyłki.
Nicholas Shanks

7
Interaktywna odpowiedź :)
wild_nothing

210

Standardową najlepszą praktyką dla interfejsów API REST jest posiadanie łącznika , a nie wielbłąda lub podkreślników.

Pochodzi z „REST API Design Rulebook” Marka Masse z Oreilly.

Ponadto zauważ, że sam Przepełnienie stosu używa łączników w adresie URL: .../hyphen-underscore-or-camelcase-as-word-delimiter-in-uris

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


3
Jeśli spojrzysz na rozdział dotyczący wytycznych dotyczących ciągu zapytania w Zestawie instrukcji projektowania interfejsu API REST, zauważysz, że wytyczne różnią się w zależności od części reguły. Nie ma wyraźnej reguły dotyczącej umieszczania znaków w ciągach zapytań, ale przekonasz się, że wszystkie przykłady w sekcji ciągów zapytań, że wszystkie klucze są w wielbłądzie.
Michael Lang,

1
Just FYI - „REST API Design Rulebook” został opublikowany w październiku 2011 r. Możliwe, że w ciągu ostatnich 8 lat wszystko się zmieniło.
ChrisN,

25

Chociaż polecam łączniki, postuluję również odpowiedź, której nie ma na twojej liście:

W ogóle nic

  • API moja firma ma URI jak /quotationrequests/, /purchaseorders/i tak dalej.
  • Mimo że powiedziałeś, że była to aplikacja intranetowa, wymieniłeś SEO jako zaletę. Google pasuje do wzorca / foobar / w adresie URL dla zapytania?q=foo+bar
  • I naprawdę nadzieję, że nie biorą pod uwagę wykonanie połączenia PHP dowolnym ciągiem użytkownik przechodzi do paska adresu, jak sugeruje @ ServAce85!

+1 za wskazanie oczywistego wyboru. Ujednoznacznia także / quoterequests / from / quotation / Requests /.
Josh Petitt

33
Złe w tej odpowiedzi jest to, że z punktu widzenia SEO maszyna nie może zrozumieć, gdzie kończy się jedno słowo, a drugie zaczyna, więc informacje te są tracone. Jest to również trudne dla ludzkich czytelników. Lepiej mieć jakieś separatory na poziomie słów niż nic.
Al Sweigart

3
@AlSweigart SEO nie jest istotne, ponieważ jest to aplikacja intranetowa za ścianą logowania.
Nicholas Shanks

2
Zgadzam się z @ niel-mcguigan, że chociaż jest to aplikacja intranetowa, jeśli wszędzie używasz łączników, pamiętaj o jednej rzeczy mniej.
Drew Goodwin,

2
@DrewGoodwin Fair wystarczy. Zauważ jednak, że powiedziałem „postuluj”, a nie „polecam” :-) A domeny zwykle nie mają łączników, więc używanie ich na ścieżkach to już jedna rzecz do zapamiętania.
Nicholas Shanks,

18

Ogólnie rzecz biorąc, nie będzie miał wystarczającego wpływu, aby się martwić, zwłaszcza, że ​​jest to aplikacja intranetowa, a nie aplikacja internetowa ogólnego zastosowania. W szczególności, ponieważ jest to intranet , SEO nie stanowi problemu, ponieważ Twój intranet nie powinien być dostępny dla wyszukiwarek. (a jeśli tak, to nie jest to aplikacja intranetowa).

A każda platforma warta swojej soli albo ma już domyślny sposób, aby to zrobić, albo dość łatwo jest zmienić sposób, w jaki radzi sobie z wielosłowowymi składnikami URL, więc nie martwiłbym się tym zbytnio.

To powiedziawszy, oto jak widzę różne opcje:

Łącznik

  • Największym zagrożeniem dla myślnikami jest to, że ten sam znak (zazwyczaj) jest także używany do odejmowania i negacji numerycznej (tj. Minus lub ujemnego ).
  • Łączniki nie działają w komponentach URL. Wydaje się, że na końcu adresu URL mają sens jedynie w celu oddzielenia słów w tytule artykułu. Lub na przykład tytuł pytania o przepełnienie stosu, który jest dodawany na końcu adresu URL dla celów SEO i przejrzystości użytkownika.

Podkreślać

  • Ponownie czują się źle w komponentach URL. Przerywają przepływ (i piękno / prostotę) adresu URL, ponieważ zasadniczo dodają dużą, ciężką pozorną przestrzeń pośrodku czystego, płynnego adresu URL.
  • Mają tendencję do wtapiania się w podkreślenia. Jeśli oczekujesz od użytkowników kopiowania i wklejania twoich adresów URL do MS Word lub innych podobnych programów do edycji tekstu, lub w dowolnym innym miejscu, które może pobrać adres URL i stylizować go podkreśleniem (jak tradycyjnie są to linki ), możesz chcieć unikaj podkreśleń jako separatorów słów. Zwłaszcza po wydrukowaniu podkreślony adres URL z podkreślnikami zwykle wygląda tak, jakby zawierał spacje zamiast podkreślników.

CamelCase

  • Zdecydowanie mój ulubiony, ponieważ sprawia, że ​​adresy URL wydają się płynąć lepiej i nie ma żadnych błędów, które robią poprzednie dwie opcje.
  • Może być nieco trudniejszy do odczytania dla osób, które mają trudności z odróżnieniem wielkich i małych liter, ale nie powinno to stanowić większego problemu w adresie URL, ponieważ większość „słów” powinna składać się z adresów URL i /tak czy inaczej . Jeśli okaże się, że masz składnik adresu URL o długości przekraczającej 2 „słowa”, prawdopodobnie powinieneś spróbować znaleźć lepszą nazwę dla tego pojęcia.
  • Może to powodować problem z rozróżnianiem wielkości liter, ale większość platform można dostosować tak, aby rozróżniała wielkość liter lub wielkość liter. W każdym razie jest to problem tylko w 2 przypadkach: a.) Ludzie wpisujący adres URL, i b.) Programiści (ponieważ nie jesteśmy ludźmi) wpisujący adres URL. Literówki zawsze stanowią problem, bez względu na wielkość liter, więc jest to nie inaczej niż w jednym przypadku.

13
Nie zgadzać się. Spójrz na SO, przejrzyj wszystkie witryny Wordpress, spójrz na większość serwisów informacyjnych, wszystkie używają łączników. Również obudowa wielbłąda miesza przypadki, sieć moim zdaniem powinna być małymi literami.
Fabien Warniez

4
Moim zdaniem w sieci powinna być rozróżniana wielkość liter. Jeśli chodzi o konwencję, jeśli podążasz drogą RoR (rubin na szynach), użyjesz podkreślenia. Zwykle robię to, aby zachować spójność między trasami generowanymi przez szyny i nazwanymi trasami. Niemniej jednak uważam, że dla mnie myślenie lepiej czyta niż podkreślenia.
rpbaltazar

1
Być może mają wewnętrzną wyszukiwarkę w intranecie?
Juha Untinen,

3
Nie zgadzać się. Oba argumenty przeciwko myślnikom są błędne. Nie ma niebezpieczeństwa związanego z negacją lub odejmowaniem, ponieważ mówimy tutaj o części nazwy krotki, nigdy nie powinieneś funkcjonować ani oceniać części nazwy krotki pod kątem matematyki lub negacji. Nie ma też nic niewygodnego w używaniu łączników w URI, ponieważ jest to od dawna najlepsza praktyka stosowana przez brak dobrze znanych witryn. Nie wymagają również naciśnięcia klawisza Shift i są traktowane jako granice słów przez praktycznie każdego.
tpartee

2
O ile pamiętam, myślniki są często używaną normą w adresach URL i są zdecydowanie uważane za najlepszą praktykę w dzisiejszych standardach. Nie korzystania z nich, ponieważ czują się niezręcznie wydaje się niewygodne do mnie.
pistolet-pete

2

Krótka odpowiedź:

małe litery z łącznikiem jako separatorem

Długa odpowiedź:

Jaki jest cel adresu URL?

Jeśli wskazanie adresu jest odpowiedzią, skrócony adres URL również wykonuje dobrą robotę. Jeśli nie ułatwimy czytania i utrzymania, nie pomoże to zarówno programistom, jak i opiekunom. Reprezentują one jednostkę na serwerze, więc muszą być nazwane logicznie.

Google zaleca używanie łączników

Rozważ użycie interpunkcji w swoich adresach URL. Adres URL http://www.example.com/green-dress.html jest dla nas znacznie bardziej użyteczny niż http://www.example.com/greendress.html . Zalecamy stosowanie łączników (-) zamiast podkreślników (_) w adresach URL.

Pochodzący z podstaw programowania, camelCase jest popularnym wyborem do nazywania wspólnych słów.

Ale RFC 3986 definiuje adresy URL jako uwzględniające wielkość liter dla różnych części adresu URL. Ponieważ w adresach URL rozróżniana jest wielkość liter, zachowanie małych liter (małe litery) jest zawsze bezpieczne i uważane za dobry standard. Teraz to wyjmuje futerał z wielbłąda przez okno.

Źródło: https://metamug.com/article/rest-api-naming-best-practices.html#word-delimiters


-1

oto najlepsze z obu światów.

Lubię też „podkreślenia”, oprócz wszystkich twoich pozytywnych punktów na ich temat, jest też pewien oldschoolowy styl.

Więc używam podkreślników i po prostu dodaj małą regułę przepisywania do pliku .htaccess twojego Apache, aby ponownie zapisać wszystkie podkreślenia do łączników.

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.