2012-04-11 19 views
5

Questa è una teoria/domanda migliore pratiche per quanto riguarda il design RESTful e hateoas ...effetti collaterali su altre risorse

Date le risorse:

/MyResources/(una raccolta dei nostri oggetti di risorse)

e

/transazioni/(un insieme di transazioni storiche che si sono verificati nel sistema)

E 'una pratica valida per:

POST/MyResources/

non solo per creare una nuova risorsa a/MyResources/ma anche una nuova risorsa a/transaction /?

In altre parole, un POST (o qualsiasi verbo) a un URL può influire sulle risorse sia su quell'URL che su altri? C'è un altro approccio? Ovviamente potremmo usare due POST, ma ciò richiede che ci si fidi che l'utente mantenga lo stato valido attraverso le modifiche multi-risorsa.

risposta

4

Sì, questo va bene. Immagina un altro caso in cui il sistema espone un URI /myresources/latest. Quando non ci sono risorse, questo potrebbe restituire 404, ma quando si avvia il POSTing delle risorse, sia l'URI canonico che l'URI latest restituiranno 200 OK. Ci sono molti, molti vantaggi utili per questo approccio.

Tuttavia, tenere a mente la cache durante la progettazione di tali risorse. Ad esempio, se si esegue il POST nella raccolta /myresources/, si invaliderà tale raccolta in tutte le cache lungo il percorso. Tuttavia, non invalida la raccolta /transactions/ e i due indici potrebbero non essere sincronizzati. Possono essere comunque fuori sincrono su tutto il sistema, a seconda del grafo delle cache tra più client e dei server di origine, ma spesso i client vengono progettati per aspettarsi che questa azione a distanza sia sincrona e il caching può frustrare questo in casi come questo.

+0

Pensieri utili, grazie! Il problema relativo alla cache non dovrebbe essere presente in quasi tutte le API RESTful aggiornabili? E questo problema non sarebbe mitigato usando le ultime intestazioni mod? – James

+0

Sì; e sì, può. – fumanchu

1

Mi sembra del tutto ragionevole. Non c'è modo in cui la persona che crea la nuova risorsa potrebbe dire se, ad esempio, questo è stato implementato avendo un altro client interrogare per nuove risorse, quindi iniettare la risorsa della transazione, giusto?

Quindi, non c'è alcun problema concettuale a quel livello, per non parlare del livello "è ragionevole per il server di creare nuove risorse".

Problemi correlati