API REST con creazione di risorse opzionali

0

Ho un'app Web con front-end JavaScript che comunica con il back-end tramite API REST (chiamate AJAX). Il front-end ha una pagina di iscrizione. Quando l'utente decide di registrarsi, front-end effettua la chiamata REST per registrare quell'utente (richiesta POST inviata a / URL risorsa utente).

Gli utenti possono anche accedere / registrarsi tramite Facebook. Quando qualcuno sceglie di accedere tramite Facebook, la mia app non sa se l'utente è già registrato o dovrei registrarlo. Per ora ho una semplice implementazione di quel processo. Quando qualcuno accede tramite Facebook:

  1. Viene effettuata una chiamata HEAD per verificare se l'utente esiste nella raccolta di utenti (HEAD / users / id)
  2. Se l'utente non esiste, viene effettuata una chiamata POST per registrare un nuovo utente.

Ciò che non mi piace di questa soluzione è che:

  1. È necessario effettuare due chiamate per verificare se l'utente è stato registrato e quindi registrare quell'utente.
  2. Quando eseguo la chiamata HEAD per verificare se l'utente esiste e l'utente non esiste ricevo 404 nella console JS. È una situazione normale quando l'utente non esiste (non era registrato prima), ma quando qualcuno guarda nella console potrebbe sembrare che qualcosa sia andato storto.

Potrei saltare la chiamata HEAD e fare una chiamata POST e quando risulta che l'utente è stato registrato prima che io possa restituire 409 dalla chiamata POST REST. Non mi piace ancora questo approccio perché avrei ancora un errore nella console JS (409) e la seconda cosa negativa è che la richiesta di registrazione POST verrà inviata ogni volta che l'utente di Facebook accede anche se era già registrato.

Ho esaminato alcuni grandi siti Web e sembrano avere una chiamata AJAX al momento della firma di uin / up tramite Facebook. L'aggiunta di due percorsi separati: iscriversi tramite Facebook e accedere tramite Facebook non risolverà il problema poiché di solito quando qualcuno sceglie di accedere tramite Facebook ogni pagina reindirizza internamente al processo di registrazione e io voglio fare una cosa del genere.

Quindi la mia domanda è qual è il modo migliore per progettare tali comunicazioni dal lato REST APi?

    
posta ctomek 22.07.2016 - 21:18
fonte

1 risposta

1

Ah, capisco. Questo suona come una richiesta PUT sarebbe la strada da percorrere, quindi. Semanticamente, viene effettuata una richiesta PUT quando si conosce l'URL della risorsa che si sta per colpire e si desidera creare o aggiornare la risorsa su quell'URL.

In alternativa, avere endpoint diversi in base al fatto che un utente si stia registrando o effettuando l'accesso (che è il modo in cui la maggior parte dei siti lo fa).

    
risposta data 23.07.2016 - 03:11
fonte

Leggi altre domande sui tag