Le sostituzioni Node.js e Zend "router" per le stringhe di query?

5

Non capisco il punto reale dei router Node.js e Zend. Mi sembra che stiano cercando di sostituire la stringa di query, ma vedo solo esempi di percorsi a livello singolo. Ad esempio questo è quello che pensavo

"Vecchia scuola" query

www.site.com/catalog.php?size=10&colour=black&style=3xz

Router

www.site.com/catalog/3xz/10/black

Poi ho letto un post SO cercando di realizzare quanto sopra, e la risposta in alto ha detto qualcosa come "provare a re-inventare stringhe di query". Quindi ora sono confuso. Qual è il punto di questi percorsi se hai ancora bisogno di stringhe di query?

    
posta user3822370 06.04.2016 - 05:55
fonte

2 risposte

4

tl; dr: ogni URI dovrebbe identificare in modo univoco una risorsa. L'URI componente del percorso è generalmente organizzato in modo gerarchico e punta a risorse non adulterate (raccolte o singoli membri / istanze). Il componente di query URI viene generalmente utilizzato come meccanismo di filtro.

Penso che l'idea sia che la stringa di query è un modo per filtrare una risorsa, che potrebbe essere una raccolta o un'istanza. Ad esempio, potresti avere un sistema che tiene traccia dei lavori, in modo che tu possa avere un URI come:

link

che restituisce una collezione di lavori. E se si desidera una particolare istanza di risorsa lavoro, è possibile richiederla con un URI come:

link

dove "a1b2c3" è l'ID del lavoro. Lo stesso servizio potrebbe anche esporre eventi di lavoro con un URI come:

link

Si noti che gli URI che rappresentano le raccolte terminano generalmente con una / , mentre le singole risorse o le istanze delle cose in genere non lo fanno. Penso che questo significhi rispecchiare l'aspetto di un tipico filesystem, dove le directory terminano con / e i file no.

Ora, detto questo, potresti voler ottenere un sottoinsieme di eventi del lavoro che appartengono a un particolare lavoro con un URI come questo:

link

Ciò risponderebbe comunque con una raccolta, ma la raccolta verrebbe filtrata da job-id , proprio come una clausola WHERE in una query SQL.

Oppure, potresti voler richiedere che una rappresentazione speciale dei dati ritorni con una singola risorsa, ad esempio, se desideri una versione estesa (qualunque cosa ciò significhi) potresti richiedere

link

o per limitare i campi che tornano a id , user e start

link

Nell'esempio che hai fornito, l'idea potrebbe essere quella di eseguire il drill down su una particolare risorsa in modo gerarchico. Ogni URI dovrebbe identificare in modo univoco una risorsa, sia che questa sia una istanza o una collezione . Nel tuo esempio,

link

dovrebbe rappresentare una collezione, che contiene

link

come un'altra raccolta, di cui

Il link è un membro / istanza. Non esiste una legge che dice che devi progettare i tuoi URI in questo modo, e in realtà dipende dal dominio che stai modellando; ma nel tuo esempio precedente, a seconda della natura dei dati, se hai provato il seguente URI:

link

Mi aspetto che questo rappresenti una collezione; forse una collezione di un oggetto, ma comunque una collezione. Allo stesso modo, potrei aspettarmi

link

essere un'istanza / membro di quella raccolta.

    
risposta data 07.04.2016 - 00:14
fonte
1

Questo perché stanno cercando di sostituire la stringa di query. Concettualmente stanno sostituendo "chiama questa funzione con questo parametro" con "ottieni ciò che è in questa posizione".

A prima vista, possono sembrare che funzionino allo stesso modo, uno sguardo più profondo rivela differenze sia per le persone che per i programmi. Le rotte rendono più chiari i diversi rami del tuo codice, quindi se sei caso speciale 10 o 3xz che si presenta più chiaramente di quanto farebbe con un if / then da qualche parte. Fanno regole speciali significative per il tuo programma. Le rotte offrono lo stesso vantaggio agli utenti finali: attribuiscono significato alle parti del percorso, rendendo queste parti più memoriable e più facili da riconoscere e analizzare.

Le rotte offrono vantaggi alle persone, ai motori di ricerca (che possono riconoscere le stesse parti che l'utente fa e dare loro più peso) e agli sviluppatori.

Tieni presente che alcuni vantaggi si applicano solo a più parametri.

    
risposta data 07.04.2016 - 07:53
fonte

Leggi altre domande sui tag