No convierta errores de negocios en códigos de estado HTTP. Los códigos de estado deben interpretarse por el cliente HTTP, no por su dominio o por el propio usuario. Si desea comunicar un mensaje al usuario, hágalo en el cuerpo de la respuesta
Creando el seguimiento 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
Duplicar el seguimiento 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!"}
Para obtener más información sobre la causa del error, podemos usar encabezados personalizados.
MyApplication-error: AlreadyFollowingUserError
Dejar de seguir
2: igual para cuando el usuario no está siguiendo a alguien e intenta
dejar de seguirlo.
Este segundo caso es ligeramente diferente. Si estamos intentando eliminar un recurso que no existe
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"}
Por otro lado, como @K. Alan Bates, como comentó (gracias Alan), podríamos hacer que la operación sea idempotente, tan pronto como el URI que solicitamos esté todavía disponible.
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
He elegido 204 por simplicidad. Puede ser 200 o 202.
En cualquier caso, no deberíamos responder con 401 Unauthorized
a menos que el servicio de seguridad indique lo contrario.
1:
Editar: idealmente después de la creación de un nuevo recurso, deberíamos responder con la nueva ubicación del recurso y el código de estado 201
2:
Editar: el código de estado aquí dependerá del método. Si enviamos un POST está solicitando un nuevo recurso. Si ya existe, 409 Conflicto está bien. Si la solicitud crea un nuevo recurso, 201. Si enviamos un PUT, 200 o 204 están bien