Ricordando i valori selezionati dall'utente nell'API Web

0

Ho creato un sito web per un campionato di tennis. Le due pagine principali sono classifiche e programma. Quando un utente accede al sito, vorrei che selezionassero prima la lega e la stagione. Ad esempio, il sito potrebbe ospitare classifiche / pianificazioni per più leghe. Quindi l'utente può selezionare la lega ABC e la stagione autunno 2016.

Per ogni richiesta dell'API Web dopo che l'utente seleziona la lega e la stagione, mi piacerebbe che l'API Web memorizzasse questa selezione per l'utente. Potrei memorizzare i valori quando l'utente li seleziona per la prima volta:

HttpContext.Current.Session ["League"] = league;

Quindi, nelle chiamate successive, l'API Web conosce la lega da utilizzare per ottenere la classifica.

Questo può essere negativo per due motivi:

  1. L'API Web non è più stateless e la chiamata dal browser dovrebbe colpire quel server API Web specifico per le chiamate future.

  2. Se il server API Web viene riavviato, perdiamo quei dati e dovremmo gestirli sul lato client / web.

Potrei dimenticarlo e memorizzare il campionato in sessione sul browser, quindi passare le informazioni all'API Web. Tuttavia, non dovremmo fidarci delle informazioni dal browser. Che cosa impedisce a qualcuno di utilizzare gli strumenti di sviluppo nel browser e inserire qualsiasi campionato a loro piace?

Un'altra opzione sarebbe quella di memorizzare la selezione della lega nel DB per l'utente, ma poi sto facendo chiamate DB aggiuntive per ogni richiesta per recuperare queste informazioni.

So che mi manca qualcosa, perché questo deve essere un problema comune che è stato risolto. Qual è il modo giusto per ricordare il campionato per un utente dopo averlo selezionato in origine? Il lato server ha bisogno della lega in modo che possa ottenere la classifica / pianificazione corretta per le chiamate successive.

    
posta Bob Horn 04.06.2017 - 01:24
fonte

1 risposta

3

Manterrei l'API stateless e non darei per scontato che venga sempre utilizzato dagli "utenti" di per sé. Qualsiasi altro processo potrebbe utilizzare l'API. Puoi, tuttavia, conoscere l'identità di ogni consumatore e mantenere l'autorizzazione relativa a tale identità.

Quindi, quando viene effettuata una chiamata per ottenere un campionato e una stagione, perché non avere un altro endpoint che ottiene una classifica con un riferimento di campionato e stagione di qualche tipo (nome, Id, qualunque cosa)?

Hai detto che questo potrebbe essere sfruttato da qualcuno che passa campionati e stagioni diverse da ciò che hanno originariamente selezionato. Ma questo non è un problema se si mantiene l'autorizzazione sui campionati, le stagioni e le classifiche date l'identità del chiamante. Quindi, se un utente modifica la richiesta a qualcosa a cui non hanno l'autorizzazione, restituisci 403 Proibiti.

    
risposta data 04.06.2017 - 02:37
fonte

Leggi altre domande sui tag