Estoy desarrollando un servicio RESTful simple para torneos y horarios. Cuando se crea un torneo a través de una solicitud POST que contiene un cuerpo JSON, el torneo se inserta en un BiMap
, declarado de la siguiente manera en una implementación DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Cuando se crea un torneo, se devuelve su ID de cadena asociada para que el usuario pueda tener una referencia futura de ese torneo. Él / ella puede obtener información del nuevo torneo realizando la siguiente solicitud:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
¿Pero qué pasa si no se encuentra un torneo con tal identificación? Hasta ahora, estoy devolviendo una respuesta 204. Bueno, Jersey lo está haciendo por mí cuando regresa null
de uno de sus métodos. Este es el método que corresponde a la ruta anterior:
@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Tournament getTournament(@PathParam("id") String id) {
Optional<Tournament> optTournament = tournamentDao.getTournament(id);
if (optTournament.isPresent())
return optTournament.get();
return null;
}
Mi pregunta es: ¿está bien devolver una 204: No Content
respuesta, o debería ser una 404
respuesta, ya que no se encontró el recurso?
Si debo cambiarlo a 404, pregunta obvia: ¿Debería cambiar la firma del método correcto? Como ahora un torneo (de tipo Tournament
) podría no ser devuelto, el método debería verse diferente. ¿Debo usar el Response
tipo como el tipo de retorno en su lugar?
{content: ''}
), una respuesta 204 sería inapropiada.