Je développe un service RESTful simple pour les tournois et les horaires. Lorsqu'un tournoi est créé via une requête POST contenant un corps JSON, le tournoi est inséré dans un BiMap
, déclaré comme suit dans une implémentation DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Lorsqu'un tournoi est créé, son identifiant de chaîne associé est renvoyé afin que l' utilisateur puisse avoir une référence future de ce tournoi. Il / elle peut obtenir des informations du nouveau tournoi en effectuant la demande suivante:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Mais que se passe-t-il si aucun tournoi avec un tel identifiant n'est trouvé? Jusqu'à présent, je retourne une réponse 204. Eh bien, Jersey le fait pour moi en revenant null
d'une de ses méthodes. C'est la méthode qui correspond à l'itinéraire ci-dessus:
@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;
}
Ma question est: est-il correct de renvoyer une 204: No Content
réponse, ou devrait-il plutôt être une 404
réponse, car la ressource n'a pas été trouvée?
Si je devais le changer en 404, question évidente: devrais-je changer la signature de la méthode non? Etant donné que maintenant un tournoi (de type Tournament
) peut ne pas être retourné, la méthode devrait être différente. Dois-je Response
plutôt utiliser le type comme type de retour?
{content: ''}
), une réponse 204 serait inappropriée.