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.