Mamy bazę danych, niezależnie od tego, czy są to produkty, posty na blogu czy coś takiego. Musimy zaprojektować schemat adresów URL, aby je rozwiązać, dla publicznej witryny internetowej.
Oto dwa przykłady związane z identyfikatorem bazy danych:
Oto przykład, który jest przyjazny:
(Trochę rzutu oka na moje życie przeglądania tam)
Lubię przyjazne adresy URL, ponieważ masz pojęcie o tym, co znajduje się na końcu adresu URL po najechaniu myszą lub zobaczeniu w e-mailu lub dokumencie. Tak jest lepiej dla SEO, albo kiedyś.
Co się stanie, gdy nazwa dokumentu lub produktu zostanie zmieniona? Albo dlatego, że się zmienił (Wiki nie może się zmienić, ale nasze zasoby mogą) lub z powodu literówki, prawda? Nasze zasoby są bardzo techniczne, długie słowa i podatne na błędy.
Ponadto mamy identyfikator bazy danych, który jest liczbą. Spójrzmy na pomysł na adres filmu za pomocą udawanego wypożyczalni:
Identyfikator jest oczywisty i jest używany w wyszukiwaniu DB. W porządku.
Bit drzwi przesuwnych nie jest unikalny i właśnie został wygenerowany z tytułu wideo, można go zweryfikować przy pomocy GET, więc jeśli wprowadzono drzwi przesuwne i nie pasują one do tego, co naprawdę jest w dokumencie 287171, odpowiada 404.
A może można to zignorować, pozwalając ludziom trzymać tam, co im się podoba, jeśli komuś na to zależy. Więc ten adres URL również działałby:
Problem z weryfikacją części przyjaznej polega, jak wspomniano, na problemie zmiany nazwy lub korekty literówki. Jeśli nazwa się zmieni, a w naszej domenie tak się stanie, nie chcemy rozkładać adresów URL, które tam są, więc powinniśmy:
Tylko nie weryfikuj przyjaznej części.
Zweryfikuj, ale dodaj „historię” przyjaznych części do rekordu bazy danych, aby wszystkie poprzednie przyjazne identyfikatory nadal działały!
Twoje myśli i pomysły są mile widziane.
Luke
http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids
(używając wersji niezweryfikowanej w świetle zmian tytułu, również krótszy link „udostępnij” to tylko id:http://programmers.stackexchange.com/q/255684/25768
(i identyfikator użytkownika do śledzenia odznak)Odpowiedzi:
Przechowywanie identyfikatora w adresie URL jest metodą sprawdzającą się w przyszłości, a jak wykazano, adresy URL mogą nadal wyglądać stosunkowo dobrze.
Inną opcją stosowaną w wielu projektach jest przechowywanie historii wcześniej używanych ślimaków. Gdy tytuł się zmienia, aktualizujesz ślimak i jeśli ktoś próbuje szukać przestarzałego ślimaka, wyszukaj na liście starych ślimaków. W ten sposób stare ślimaki mogą być ponownie wykorzystane do nowej zawartości (lub nie w zależności od implementacji).
Wordpress to zrobił, podobnie jak klejnot przyjazny_id, który jest prawdopodobnie najczęściej używanym klejnotem do zarządzania przyjaznymi identyfikatorami dla Railsów.
Ponadto, chociaż lubię dobrze wyglądające adresy URL, myślę, że należy pamiętać, że jest to prawdopodobnie funkcja używana przez bardziej doświadczonych użytkowników. Niektóre przeglądarki zaczynają nawet ukrywać adresy URL (lub ich część).
źródło
W przeszłości korzystałem z dwóch różnych scenariuszy.
/id/some-slug
gdzie służy do wyszukiwania , pocisk nie. Tak więc ślimak może być czymkolwiek . Ale jeśli ślimak nie pasuje do faktycznego ślimaka, użytkownik zostaje przekierowany do bieżącej wersji.id
/permalink
w przypadkach, gdy nie chcieliśmy mieć identyfikatora w adresie URL lub gdzie adres URL nie powinien się nigdy zmieniać, nawet jeśli jest dostępny identyfikator (patrz [1] i [2] ). Oczywiście, w tym przypadku służy do odnośnika . Zarówno bieżący ślimak, jak i bezpośredni link (pierwszy ślimak) są przechowywane w bazie danych.permalink
W żadnym z tych sposobów nie trzeba przechowywać historii ślimaków w bazie danych, co wkrótce stałoby się problematyczne.
ps: W drugim przypadku będziesz potrzebować bardzo konkretnego routingu, aby zachować kredyty społecznościowe:
Zobacz ponownie [1] i [2] .
źródło
W tym celu zaprojektowano odpowiedź HTTP 301 (przeniesiona). Jeśli jakiś klient przejdzie do starego identyfikatora URI, wystarczy wysłać mu nowy identyfikator URI i można do niego przekierować.
Jeśli wykonam poprawnie, to jest powielanie pracy, masz zarówno identyfikator nazwy zasobu, jak i identyfikator w tym samym URI. To nie służy żadnemu celowi.
Jeśli martwisz się, że wiele filmów ma tę samą nazwę, możesz dodać dodatkowe informacje o filmie do adresu URL
lub
Powiedziawszy, że nie ma nic złego w używaniu identyfikatorów, jeśli ma to sens dla twojego modelu danych, szczególnie jeśli jedyną rzeczą, którą grupujesz, jest to, że są to filmy.
Klient, zarówno komputer, jak i człowiek, nie powinien przede wszystkim polegać na strukturze identyfikatora URI, powinien poszukać treści, którą zwróciłeś, aby dowiedzieć się, który zasób znaleźć.
Nie ma nic złego w posiadaniu rozsądnego systemu URI, który ułatwia odgadnięcie lokalizacji zasobu lub nawigację w górę i w dół struktury na podstawie wspólnych właściwości (tj. Wszystkich filmów w 2004 r.), Ale twój system nie powinien polegać i żaden klient nie powinien się zepsuć, jeśli zmienisz swoje URI
Innymi słowy, powinieneś mieć możliwość zmiany z dnia na dzień
do
i żaden klient nie powinien się zepsuć, ponieważ klienci powinni patrzeć na treść, a nie na adresy URL.
źródło
BBC używa ślimaków, które są:
np. http://www.bbc.co.uk/programmes/b006mk7h
Każdy program publiczny ma zarówno identyfikator, jak i ślimak. Identyfikatory mogą być jak zwykle liczbami całkowitymi z automatyczną inkrementacją, a luki nie są ujawniane.
źródło
Z punktu widzenia RESTful, identyfikatory URI powinny mieć przewidywalną i hierarchiczną strukturę, aby zwiększyć użyteczność.
Ułatwi to korzystanie z nich przez konsumentów. Jeśli Twoje dane mają relacje, konieczna byłaby jakaś hierarchia.
Wygląda na to, że schemat to:
\video\[name]\[id]
Jeśli nazwa nie jest używana do dalszej klasyfikacji, może zostać odrzucona na korzyść
\video\[id].
Jeśli jednak chcesz sklasyfikować filmy, być może nazwa jest przydatna.
Przykłady:
To naprawdę decyzja projektowa dotycząca sposobu modelowania dostępu.
źródło