Esegui e annulla l'azione nella stessa pagina / diversa - C'è una differenza?

0

Se sto sviluppando un'applicazione come un social network e implemento un pulsante mi piace / preferito con AJAX, è preferibile usare un URL per mi piace / non mi piace o 2 URL diversi?

Se ne utilizzo uno, ad esempio like.php , in quell'URL verificherei se l'ID del post fosse già piaciuto o meno, quindi fare l'azione opposta.

Se ne utilizzo due, ad esempio like.php e dislike.php , in quegli URL verificherei se l'ID post fosse già piaciuto o non piacesse e quindi restituire un errore se l'azione era già stata eseguita.

Direi che la prima opzione è più semplice, perché richiede meno codice backend / frontend, ma molti grandi siti web usano il secondo metodo. C'è una ragione dietro a questo?

    
posta Zerquix18 28.01.2016 - 04:08
fonte

3 risposte

1

Con il tuo primo schema, il tuo endpoint non è idempotente (cioè se lo esegui due volte non fa la stessa cosa che eseguirlo una volta). Con quest'ultimo schema, puoi facilmente implementarlo come idempotente (e potenzialmente usare un metodo PUT). In questo caso, se l'utente desidera qualcosa che gli è piaciuto in precedenza, dovrebbe solo riuscire e non fare nulla. Ciò consente di rieseguire le richieste di fronte a connessioni di rete intermittenti.

C'è anche un leggero vantaggio in termini di manutenzione suddividendolo, discutibilmente. Ogni endpoint fa una cosa e una cosa solo senza logica condizionale. (Tuttavia, la tolleranza ai guasti e i benefici rispetto alla concorrenza sono molto più significativi.)

    
risposta data 28.01.2016 - 04:30
fonte
1

Semanticamente si tratta di uno scenario di creazione o aggiornamento, che è ciò che PUT (che è anche idempotente) significa.

quindi fai una richiesta PUT HTTP a un singolo endpoint con il valore per like.

{like: true}

per i Mi piace e

{like: false}

per antipatia.

    
risposta data 28.01.2016 - 12:11
fonte
0

Con il secondo approccio c'è potenzialmente un vantaggio in termini di prestazioni, perché è possibile aggiornare direttamente il DB senza verificare se il post è già piaciuto / non piace. (Solo un aggiornamento, contro un SELECT e poi un UPDATE)

Probabilmente sai già se il post deve essere piaciuto o non essere gradito, perché questa azione proviene da una GUI che mostra solo il pulsante pertinente (se il post è piaciuto mostra "antipatia" o il contrario).

Non c'è nemmeno bisogno di mostrare un errore se il post è già piaciuto e vuoi piacergli, perché significa che non c'è un cambio di stato per il post.

Si noti che si può anche usare un singolo endpoint ma con verbi diversi, come PUT e DELETE, in modo da poter ottenere lo stesso beneficio prestazionale come ho affermato, ma usando un singolo endpoint invece di 2.

I'd say the first option is easier, because it requires less backend/frontend code, but many big websites use the second method. Is there a reason behind that?

Alla fine, la vera risposta alla tua domanda è, dipende da altri fattori, potenzialmente è solo una preferenza

    
risposta data 28.01.2016 - 12:35
fonte

Leggi altre domande sui tag