In poche parole, lo stai facendo completamente all'indietro.
Non dovresti avvicinarti a questo da quali URL dovresti usare. Gli URL verranno effettivamente "gratis" una volta che avrai deciso quali risorse sono necessarie per il tuo sistema E come rappresenterai quelle risorse e le interazioni tra le risorse e lo stato dell'applicazione.
Per citare Roy Fielding
Un'API REST dovrebbe impiegare quasi tutto il suo sforzo descrittivo per definire i tipi di media utilizzati per rappresentare le risorse e guidare lo stato dell'applicazione, o per definire nomi di relazioni estese e / o mark-up abilitato per ipertesti per tipi di media standard esistenti. Qualsiasi sforzo speso per descrivere quali metodi utilizzare su quali URI di interesse dovrebbero essere interamente definiti nell'ambito delle regole di elaborazione per un tipo di supporto (e, nella maggior parte dei casi, già definito da tipi di supporto esistenti). [Il fallimento qui implica che le informazioni fuori banda guidano l'interazione anziché l'ipertesto.]
Le persone iniziano sempre con gli URI e pensano che questa sia la soluzione, e quindi tendono a perdere un concetto chiave nell'architettura REST, in particolare, come citato sopra, "Il fallimento qui implica che l'informazione fuori banda sta guidando l'interazione anziché l'ipertesto. "
Ad essere onesti, molti vedono un sacco di URI e alcuni GET e PUT e POST e pensano che REST sia facile. REST non è facile. RPC su HTTP è facile, spostare BLOB di dati avanti e indietro inviati tramite payload HTTP è facile. REST, tuttavia, va oltre. REST è il protocollo agnostico. HTTP è solo molto popolare e adatto ai sistemi REST.
REST vive nei tipi di media, nelle loro definizioni e nel modo in cui l'applicazione guida le azioni disponibili per tali risorse tramite ipertesto (collegamenti, in modo efficace).
Esistono diversi punti di vista sui tipi di media nei sistemi REST. Alcuni favoriscono payload specifici dell'applicazione, mentre altri preferiscono elevare i tipi di media esistenti a ruoli appropriati per l'applicazione. Ad esempio, da un lato hai schemi XML specifici progettati per la tua applicazione rispetto all'uso di qualcosa come XHTML come tua rappresentazione, forse attraverso microformati e altri meccanismi.
Entrambi gli approcci hanno il loro posto, penso, l'XHTML funziona molto bene in scenari che si sovrappongono sia al web guidato dall'uomo che al computer, mentre i primi, tipi di dati più specifici che ritengo possano facilitare le interazioni macchina-macchina. Trovo che il potenziamento dei formati delle materie prime possa rendere potenzialmente difficile la negoziazione dei contenuti. "application / xml + yourresource" è molto più specifico come tipo di media rispetto a "application / xhtml + xml", poiché quest'ultimo può applicarsi a molti payload che potrebbero essere o meno qualcosa a cui un client del computer è effettivamente interessato, né può determinare senza introspezione.
Tuttavia, XHTML funziona molto bene (ovviamente) nella rete umana in cui i browser Web e il rendering sono molto importanti.
La tua candidatura ti guiderà in questo tipo di decisioni.
Parte del processo di progettazione di un sistema REST è scoprire le risorse di prima classe nel sistema, insieme alla derivata, risorse di supporto necessarie per supportare le operazioni sulle risorse primarie. Una volta scoperte le risorse, quindi la rappresentazione di tali risorse, nonché i diagrammi di stato che mostrano il flusso di risorse tramite ipertesto all'interno delle rappresentazioni perché la sfida successiva.
Ricordiamo che ogni rappresentazione di una risorsa, in un sistema ipertestuale, combina sia la rappresentazione effettiva della risorsa che le transizioni di stato disponibili per la risorsa. Considera ogni risorsa un nodo in un grafico, con i collegamenti che sono le linee che lasciano quel nodo ad altri stati. Questi collegamenti informano i clienti non solo su ciò che può essere fatto, ma anche su ciò che è necessario per farlo (poiché un buon collegamento combina l'URI e il tipo di supporto richiesto).
Ad esempio, potresti avere:
<link href="http://example.com/users" rel="users" type="application/xml+usercollection"/>
<link href="http://example.com/users?search" rel="search" type="application/xml+usersearchcriteria"/>
La documentazione parlerà del campo rel chiamato "utenti" e del tipo di supporto di "application / xml + youruser".
Questi collegamenti possono sembrare ridondanti, parlano tutti allo stesso URI, praticamente. Ma non lo sono.
Questo perché per la relazione "utenti", quel collegamento parla della raccolta di utenti e puoi usare l'interfaccia uniforme per lavorare con la raccolta (OTTIENI per recuperarli tutti, ELIMINA per eliminarli tutti, ecc.)
Se pubblichi questo URL, dovrai passare un documento "application / xml + usercollection", che probabilmente conterrà solo una singola istanza utente all'interno del documento in modo da poter aggiungere l'utente o no, forse, per aggiungerne altri in una volta. Forse la tua documentazione suggerirà che puoi semplicemente passare un singolo tipo di utente, anziché la raccolta.
Puoi vedere cosa richiede l'applicazione per eseguire una ricerca, come definito dal link "cerca" e dal suo mediatype. La documentazione per il tipo di supporto di ricerca ti dirà come si comporta e cosa aspettarsi come risultati.
Il takeaway qui, però, è che gli URI stessi sono sostanzialmente irrilevanti. L'applicazione controlla gli URI, non i client. Oltre ad alcuni "punti di accesso", i tuoi clienti dovrebbero fare affidamento sugli URI forniti dall'applicazione per il suo lavoro.
Il cliente deve sapere come manipolare e interpretare i tipi di media, ma non deve preoccuparsi di dove va.
Questi due collegamenti sono semanticamente identici agli occhi di un cliente:
<link href="http://example.com/users?search" rel="search" type="application/xml+usersearchcriteria"/>
<link href="http://example.com/AW163FH87SGV" rel="search" type="application/xml+usersearchcriteria"/>
Quindi, concentrati sulle tue risorse. Concentrati sulle loro transizioni di stato nell'applicazione e su come ottenere i risultati migliori.