Servizio RESTful per verificare se l'e-mail è unica

3

Abbiamo bisogno di un endpoint che ci consenta di verificare se l'email di un utente è unica. Questa operazione non sembra incredibilmente RESTful e stiamo lottando per capire come renderlo in forma. Abbiamo discusso se dovremmo rendere questo più di un endpoint in stile RPC che potrebbe apparire come il seguente:

URL

GET identities/check_email

risposta

{
  "ok": false,
  "error": "taken"
}

Il problema è che non si adatta molto bene a tutto ciò che stiamo facendo.

Abbiamo anche preso in considerazione l'invio di una richiesta di HEAD ma non siamo abbastanza sicuri di come sarebbe.

    
posta anthonator 13.04.2017 - 22:24
fonte

2 risposte

5

Usa il verbo HEAD . Se GET /identities/[email protected] restituirà 200 Okay con JSON su Joe o 404 Not Found , quindi HEAD /identities/[email protected] agisce come GET ma restituisce solo le intestazioni e il codice di stato. Puoi utilizzare HEAD come "controllo dell'esistenza" per una risorsa arbitraria (supponendo che il server che ospita la risorsa comprenda correttamente il verbo HEAD ).

Ciò presuppone che i singoli utenti siano risorse e siano identificabili tramite e-mail. Se al momento supporti solo l'identificazione dell'utente per ID come /identities/123 , puoi aggiungere una route /identities/emails/{email} che restituisca 404 Not Found o reindirizza all'URL dell'utente corrispondente.

    
risposta data 15.05.2017 - 02:36
fonte
1

Le prime due regole di REST sono che tutto è una risorsa e gli unici verbi a cui dovresti pensare sono quelli specificati da HTTP.

Esco su un arto e presumo che tu abbia un modello in cui l'accesso alle identità inizia a /identities e che puoi estrarne uno per ID con GET /identities/1234 . Presumo anche che la tua API restituisca JSON e il http://host/ all'inizio di qualsiasi URI sia implicito per brevità.

In teoria, potresti GET /identities e recuperare un array contenente riferimenti a ogni identità nel sistema:

[ "/identities/1234", "/identities/5678", "/identities/9012", ... ]

Probabilmente non è quello che vuoi, ma puoi permetterlo a piccole dosi usando stringhe di query per limitare l'elenco a un sottoinsieme. GET /[email protected] sarebbe un filtro ideale per verificare se esiste un indirizzo e-mail perché le regole aziendali dicono che devono essere uniche. Ciò significa che l'array restituito sarà sempre zero o uno degli elementi:

GET /[email protected]
[ "identities/1234" ]

GET /[email protected]
[]

Un altro modo per farlo è costruire il filtro nel modello, dove ci sono più percorsi per la stessa risorsa:

/identities/by-id/1234
/identities/by-email/[email protected]

Il tentativo di recuperare la seconda risorsa restituirebbe 200 se esistesse un identificativo con un indirizzo email di [email protected] e 404 se non lo fosse. Pur avendo più percorsi per la stessa risorsa è considerato accettabile nelle interfacce REST, è necessario considerare se presenta alcuni problemi logici come non sapere se due URI non identici puntano alla stessa risorsa.

    
risposta data 15.04.2017 - 01:58
fonte

Leggi altre domande sui tag