Fornire URL amichevoli per un sito Web rispetto a realtà di ID di database

23

Abbiamo un database di risorse, siano essi prodotti, post di blog o qualcosa del genere. Abbiamo bisogno di progettare uno schema URL per affrontarli, per il sito web pubblico.

Ecco due esempi che sono legati all'ID del database:

Ecco un esempio che è amichevole:

(Un piccolo assaggio nella mia vita di navigazione lì)

Mi piacciono gli URL amichevoli perché hai un'idea di cosa c'è nella parte finale dell'URL quando passi il mouse su una email o un documento. È meglio per il SEO, o lo era di solito.

Cosa succede quando il documento o il prodotto viene rinominato? O perché è cambiato (il Wiki potrebbe non cambiare ma le nostre risorse potrebbero) o a causa di un errore di battitura, giusto? Le nostre risorse sono molto tecniche, lunghe parole e inclini agli errori.

Inoltre, abbiamo un ID del database, che è un numero. Diamo un'occhiata a un'idea per un indirizzo di un video utilizzando un negozio fittizio:

L'ID è ovvio e viene utilizzato nella ricerca DB. Bene.

Il bit delle porte scorrevoli non è univoco e appena generato dal titolo del video, può essere verificato su GET, quindi se sono state inserite porte scorrevoli e non corrisponde a ciò che è realmente presente nel documento 287171, risponde 404.

O forse potrebbe essere ignorato, permettendo agli umani di attaccare qualsiasi cosa a loro piace lì, se qualcuno gliene fosse mai importato. Quindi questo URL funzionerebbe anche:

Il problema con la verifica della parte amichevole è, come accennato, il problema della ridenominazione o della correzione di errore di battitura. Se il nome è cambiato e nel nostro dominio ciò accade, non vogliamo rompere gli URL che sono là fuori, quindi dovremmo:

  • Non verificare la parte amichevole.

  • Verifica, ma aggiungi una "cronologia" di parti amichevoli al record del database in modo che tutti i precedenti ID amiche funzionino ancora!

I tuoi pensieri e le tue idee sono ben accetti.

Luca

    
posta Luke Puplett 08.09.2014 - 11:54
fonte

5 risposte

6

Mantenere l'ID nell'URL è il metodo di prova più futuro e, come hai dimostrato, gli URL possono ancora apparire relativamente buoni.

Un'altra opzione utilizzata da più progetti è quella di mantenere una cronologia degli slug usati in precedenza. Quando il titolo cambia, aggiorni lo slug e se qualcuno prova a cercare una lumaca obsoleta, cerca nell'elenco delle vecchie lumache. In questo modo le vecchie lumache possono essere riutilizzate per nuovi contenuti (o meno in base alla tua implementazione).

Wordpress l'ha fatto e così ha fatto la gemma friendly_id che è probabilmente la gemma più utilizzata per la gestione di ID amichevoli per Rails.

Inoltre, anche se mi piacciono gli URL di bell'aspetto, penso che sia importante ricordare che questa è probabilmente una funzione utilizzata da utenti più esperti di tecnologia. Alcuni browser stanno persino iniziando a nascondere URL (o parte di essi).

    
risposta data 08.09.2014 - 22:40
fonte
3

In passato ho utilizzato due diversi scenari.

  1. /id/some-slug dove il id è usato per cercare , lo slug no. Quindi lo slug può essere qualsiasi cosa . Ma, quando lo slug non corrisponde allo slug attuale, l'utente viene reindirizzato alla versione corrente.

  2. /permalink per i casi dove non volevamo un id nell'url o dove l'url non dovrebbe mai cambiare, anche se c'è un id disponibile (vedi [1] e [2] ). Ovviamente, in questo caso viene utilizzato permalink per la ricerca . Sia lo slug corrente che il permalink (il primo slug) sono memorizzati nel database.

In nessuno di questi modi è necessario mantenere una cronologia di lumache nel tuo database, che diventerebbe problematico molto presto.

ps: nel secondo caso avrai bisogno di un routing molto specifico per mantenere i crediti social:

  • se lo desideri, reindirizza gli utenti all'URL corrente (non permalink)
  • avere il permalink usato come url nei pulsanti social
  • reindirizza sempre il crawler di Facebook al permalink

Vedi [1] e [2] di nuovo.

    
risposta data 12.09.2014 - 22:52
fonte
2

What happens when the document or product is renamed?

La risposta HTTP 301 (spostata) è stata progettata per questo scopo. Se un cliente va al vecchio URI, semplicemente gli manda il nuovo URI e può reindirizzare a quello.

The sliding-doors bit is non-unique and just generated from the video title, it could be verified on GET, so if gliding-doors was entered and doesn't match what's really in doc 287171 it responds 404.

Se seguo correttamente questo è un lavoro di duplicazione, hai sia un identificatore di nome per la risorsa sia un id nello stesso URI. Questo non ha alcuno scopo.

Se sei preoccupato per più film con lo stesso nome, puoi aggiungere ulteriori informazioni sul film nell'URL

http://vidsyeah.com/video/2000/sliding_doors
http://vidsyeah.com/video/1932/sliding_doors

o

http://vidsyeah.com/video/studios/paramount/sliding_doors
http://vidsyeah.com/video/studios/warnerbros/sliding_doors

Detto questo non c'è niente di sbagliato nell'usare gli ID se questo ha senso per il tuo modello di dati, in particolare se l'unica cosa che stai raggruppando è che sono video.

http://vidsyeah.com/video/210232
http://vidsyeah.com/video/2342

Il client, un computer o un utente umano non dovrebbe fare affidamento sulla struttura URI in primo luogo, dovrebbero guardare il contenuto che hai restituito per capire quale risorsa trovare.

Non c'è niente di sbagliato nell'avere un sistema URI sensato che renda facile per qualcuno indovinare la posizione di una risorsa o navigare su e giù per la struttura in base a proprietà condivise (cioè tutti i film nel 2004), ma il tuo sistema non dovresti fare affidamento su questo e nessun client dovrebbe interrompere se modifichi i tuoi URI

O per dirla in altro modo, dovresti essere in grado di passare la notte da

http://vidsyeah.com/video/studios/paramount/sliding_doors

a

http://vidsyeah.com/video/12323

e nessun client dovrebbe interrompersi perché i client dovrebbero guardare al contenuto e non agli URL.

    
risposta data 09.09.2014 - 11:19
fonte
1

La BBC usa lumache che sono:

  • alfanumerico (per compattezza)
  • unique (for lookups)
  • non sequenziale (in modo che l'ordine che le cose vengono aggiunte al db non sia esposto)

es. link

Ogni programma pubblico ha sia un ID che uno slug. Gli ID possono quindi essere numeri interi a incremento automatico come al solito e gli spazi non sono esposti.

    
risposta data 14.01.2017 - 17:28
fonte
0

Da un punto di vista RESTful, gli URI dovrebbero seguire una struttura gerarchica prevedibile e perprevistica per migliorare l'usabilità.

Questo li renderà più facili da usare dai consumatori. Se i tuoi dati hanno relazioni, sarebbe necessaria una sorta di gerarchia.

Sembra che lo schema sia: \video\[name]\[id]

Se il nome non viene utilizzato per ulteriori classificazioni, potrebbe essere eliminato a favore di \video\[id].

Tuttavia, se desideri classificare i video, forse il nome è utile.

Esempi:

  • \ video \ SwingingDoors \ 123
  • \ video \ SwingingDoors \ 124
  • \ video \ SCORREVOLE_ \ 125
  • \ video \ SCORREVOLE_ \ 126

È davvero una decisione progettuale su come viene modellato l'accesso.

    
risposta data 08.09.2014 - 22:06
fonte

Leggi altre domande sui tag