Questo può essere più semplice da spiegare con un caso d'uso di esempio.
Diciamo che ho un sito di e-commerce in cui gli utenti possono aggiungere articoli al loro carrello. Quando aggiungi elementi al carrello, gli utenti possono digitare la quantità che desiderano aggiungere e quindi fare clic su un pulsante Add
. Facendo clic su Add
invierà una richiesta al server. Il server prima convaliderà che l'inventario corrente abbia abbastanza articoli per soddisfare la quantità richiesta, se ce ne sono abbastanza aggiunge l'articolo al carrello e restituisce una risposta corretta, altrimenti restituisce una risposta di errore.
Per migliorare l'esperienza utente, sarebbe bello convalidare la quantità inserita dall'utente prima ancora che facciano clic su Add
. Ciò richiederebbe l'invio di una richiesta al server che verificherà se facendo clic su Add
si verificherà un errore, ma non commetterà alcuna modifica al carrello se non ci sono errori.
Un collaboratore ha suggerito di aggiungere un parametro di query ?intent=validate
a qualsiasi endpoint che richiede questo tipo di funzionalità. Sembra una buona idea perché non dovrò creare endpoint extra.
Esistono convenzioni comuni per le API REST per gestire questo tipo di richiesta di "convalida ma non commettere nulla"? L'approccio ?intent=validate
aumenta le eventuali bandiere rosse?
UPDATE:
Grazie per il feedback, ma probabilmente dovrei chiarire alcune cose.
- Non sto davvero lavorando su un sito di e-commerce, l'ho usato solo per un esempio facile da spiegare. In realtà sto lavorando con una piattaforma di gestione dei documenti.
- Gli utenti potrebbero richiedere azioni collettive come spostare 100 documenti e cartelle in una cartella. Ci sono molte cose che devono essere convalidate per qualsiasi richiesta di questo tipo, come i diritti dell'utente su documenti e cartelle, collisioni di nomi, non spostare una cartella in se stessa, ecc. Quindi voglio veramente convalidare ogni volta che un utente controlla una casella un elenco di documenti da spostare.
- L'API continuerà a essere valida quando un utente fa clic su
Submit
per confermare le modifiche, perché ci sono altri utenti che eseguono azioni contemporaneamente. Il punto è fornire agli utenti un feedback tempestivo, in modo che non passino il tempo a controllare 100 caselle solo per scoprire che devono rinominare 2 dei documenti prima di impegnarsi. - Ci sono molte altre richieste di massa in questo sistema che devono essere trattate allo stesso modo, come la modifica dei diritti degli utenti sugli oggetti, le eliminazioni di massa, l'assegnazione di più utenti a gruppi di utenti, ecc. Sarebbe bello se ogni tipo di richiesta non ha richiesto convalida e commit endpoint separati.