Nel processo di ideazione di un framework per applicazioni web, ho passato un po 'di tempo a riflettere sulla nozione di percorsi RESTful. Se volessi creare per es. un nuovo argomento, potrei inviare una richiesta POST a / topics. I suoi parametri potrebbero essere qualcosa come: { topic: { body: 'Body' } }
Come tale, il tipo di risorsa che si sta creando può essere desunto dai parametri. Poiché esiste l'argomento di livello superiore "argomento", possiamo verificare logicamente che la richiesta è di creare un argomento.
Per me, la cosa strana è che la creazione POST è l'unica azione che cade al di fuori della nozione di una risorsa singolare o di una collezione. Non è forse né l'uno né l'altro. Certo, stai aggiungendo a una raccolta, ma al contrario di dire a GET index
non stai recuperando alcuna parte di quella raccolta, e lo stato di quella raccolta in larga misura è irrilevante. A differenza di GET
, PUT/PATCH
o DELETE
, non stai recuperando un oggetto singolare basato su un identificatore. Stai creando un articolo in cui uno non esiste.
Ho concepito un servizio di "master registrar" che rispondeva a tutte le richieste in entrata di POST
. Immagina ogni forma POST
ing a /
, con il registrar principale che determina la risorsa prevista in base ai parametri e rimanda ai servizi esistenti allo scopo di mantenere una risorsa basata su tali parametri.
In effetti, per qualsiasi azione non GET, i percorsi diventano irrilevanti. Non sembrano avere un importante scopo semantico. Un utente non ha intenzione di collegarsi all'URL di un'azione di un modulo. Anche nel caso di PUT
, PATCH
o DELETE
Il tipo di risorsa che si sta creando o la risorsa che si sta modificando può essere desunta dai parametri. Ad esempio, se stessimo modificando un argomento rispetto a crearne uno, i parametri potrebbero essere { topic: { id: 1, body: 'New Body'} }
. La presenza di un ID nei parametri indica che l'argomento in questione esiste già e deve essere recuperato prima di tutto.
Non so se questo è RESTful o no. Indipendentemente da ciò, non riesco a capire perché questo approccio sia non valido o sconsigliabile. Data la mia prudenza e ingenuità, tuttavia, mi piacerebbe sapere perché potrebbe essere.