Non tradurre gli errori di business in codici di stato HTTP. I codici di stato devono essere interpretati dal client HTTP, non dal tuo dominio o dall'utente stesso. Se vuoi comunicare un messaggio all'utente, fallo nel corpo della risposta
Creazione del follow-up 1
POST /domain/uid/follow HTTP/1.1
...
HTTP/1.1 201 Created
Date: Fri, 20 Dec 2017 14:30:00 GMT
Content-Type: application/json
Location: /domain/uid/follow/123456
Duplicazione del follow-up 2
POST /domain/uid/follow HTTP/1.1
...
HTTP/1.1 409 Conflict
Date: Fri, 20 Dec 2017 14:30:00 GMT
Content-Type: application/json
Content-Length: 100
{"message":"you are already following Shaharyar!"}
Per ulteriori informazioni sulla causa dell'errore, possiamo utilizzare intestazioni personalizzate.
MyApplication-error: AlreadyFollowingUserError
da Following
2 - Same for when the user is not following someone and tries to
unfollow him.
Questo secondo caso è leggermente diverso. Se stiamo cercando di rimuovere una risorsa che non esiste
DELETE /domain/uid/follow HTTP/1.1
...
HTTP/1.1 404 Not Found
Date: Fri, 20 Dec 2017 14:30:00 GMT
Content-Type: application/json
Content-Length: 1000
MyApplication-error: ResourceNotFound
{"message":"resource not found"}
D'altra parte, come @K. Alan Bates ha commentato (grazie Alan), potremmo rendere l'operazione idempotente, non appena l'URI richiesto è ancora disponibile.
DELETE /domain/uid/follow HTTP/1.1
...
HTTP/1.1 204 No content
Date: Fri, 20 Dec 2017 14:30:00 GMT
Content-Type: application/json
Content-Length: 100
Ho scelto 204 per semplicità. Potrebbe essere 200 o 202.
In ogni caso, non dovremmo rispondere con 401 Unauthorized
a meno che il servizio di sicurezza non dica altrimenti.
1:
Modifica - Idealmente dopo una nuova creazione di risorse, dovremmo rispondere con la nuova posizione della risorsa e il codice di stato 201
2:
Modifica - Il codice di stato qui dipenderà dal metodo. Se inviamo un POST, stai richiedendo una nuova risorsa. Se esiste già, 409 Conflict è ok. Se la richiesta crea una nuova risorsa, 201. Se inviamo un PUT, 200 o 204 sono ok