Progettazione di app CRUD

0

Sto lavorando su un'app CRUD in cui ho cose chiamate richieste che possono avere molte iterazioni. Ho un endpoint da colpire chiamato iteration / create / requestId. Quando questa pagina viene premuta, mostro una tabella vuota con i campi che l'utente deve compilare. Prendo l'indice della riga e lo assegno a un campo nell'iterazione chiamato il numero di iterazione. Se un utente dovesse inserire manualmente l'URL e non seguire l'interfaccia utente, sarebbe in grado di salvare nuove iterazioni con numeri di iterazione duplicati.

La mia domanda è se non sto seguendo pratiche restful dal momento che si assume che lo stato che creerai sarà chiamato una sola volta per richiesta e che l'iterazione / modifica / richiestaId verrà successivamente chiamata. Penso che dovrei progettare tutto in modo che possa essere colpito e non ci saranno effetti collaterali, ma sono contro una scadenza e non sono sicuro su quale priorità dare?

    
posta newbish 16.09.2016 - 16:20
fonte

2 risposte

0

Perché un modulo che devo ancora compilare deve sapere dove sarà depositato?

Decidi il numero dopo che ho fatto tutto il mio tempo, forse non finire mai, digitando o ti ritroverai a corto di numeri. Quel numero è una risorsa che stai regalando troppo a buon mercato.

Questo risolve anche il tuo problema di hacking degli URL.

Sembra che ci sia qualche requisito di relazione posizionale con le righe che stavi cercando di risolvere con questo numero precaricato. Se non riesci a farmi presentare l'intera tabella in una sola volta per qualche motivo, lasciami inviare righe con numeri relativi a ME. Quindi aggiungi il numero che desideri aggiungere a quei numeri per renderli relativi al server.

Il kicker è che con ogni sottomissione devi considerare che anche altre persone potrebbero aggiornarsi. Quindi potrei pensare di avere una fila di file tutto per me, poi all'improvviso qualcun altro sottometterà qualcos'altro tra di loro. Se insisti a inviare una riga alla volta anziché il mio intero tavolo in una volta, è proprio così che sarà.

    
risposta data 16.09.2016 - 17:06
fonte
0

I'm up against a deadline and not sure what to prioritize?

Fai quello che devi spedire.

Fielding in 2008

REST is software design on the scale of decades: 
every detail is intended to promote software longevity 
and independent evolution. Many of the constraints 
are directly opposed to short-term efficiency.

Non dovresti accettare i vincoli architettonici REST a meno che le proprietà che introducono abbiano un valore nella tua situazione.

My question is if I'm not following restful practices since there is assumed state that create will be called only once per request and that the iteration/edit/requestId will subsequently be called.

Non sembra che la tua implementazione soddisfi il vincolo stateless

each request from client to server must contain all 
of the information necessary to understand the request, 
and cannot take advantage of any stored context on 
the server. Session state is therefore kept entirely 
on the client.

"tutte le informazioni" in pratica significa "no pronomi". Il messaggio fornito dal cliente deve descrivere esplicitamente l'intento del cliente senza fare affidamento su una cronologia comune.

Si noti che si tratta di capire il messaggio, non di soddisfarlo. "Aggiungi una riga alla versione corrente" non funziona, perché il client e il server potrebbero non essere d'accordo su quale sia la versione corrente. D'altra parte, "Aggiungi una riga alla versione 7" non è ambiguo; e il server può rifiutare l'azione se la versione 7 e la comprensione del server della "versione corrente" non sono d'accordo.

    
risposta data 21.09.2016 - 06:02
fonte

Leggi altre domande sui tag