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:
- Viene effettuata una chiamata HEAD per verificare se l'utente esiste nella raccolta di utenti (HEAD / users / id)
- Se l'utente non esiste, viene effettuata una chiamata POST per registrare un nuovo utente.
Ciò che non mi piace di questa soluzione è che:
- È necessario effettuare due chiamate per verificare se l'utente è stato registrato e quindi registrare quell'utente.
- 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?