Sto sviluppando un semplice servizio RESTful per tornei e programmi. Quando un torneo viene creato tramite una richiesta POST contenente un corpo JSON, il torneo viene inserito in un BiMap
, dichiarato come segue in un'implementazione DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Quando viene creato un torneo, viene restituito l'ID stringa associato in modo che l' utente possa avere riferimenti futuri di quel torneo. Può ottenere informazioni dal nuovo torneo eseguendo la seguente richiesta:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Ma cosa succede se non viene trovato nessun torneo con tale ID? Finora, sto restituendo una risposta 204. Bene, Jersey lo sta facendo per me quando ritorna null
da uno dei suoi metodi. Questo è il metodo che corrisponde al percorso sopra:
@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;
}
La mia domanda è: è corretto restituire una 204: No Content
risposta o dovrebbe essere 404
invece una risposta, poiché la risorsa non è stata trovata?
Se dovessi cambiarlo in una 404, domanda ovvia: dovrei cambiare la firma del metodo giusto? Poiché ora un torneo (di tipo Tournament
) potrebbe non essere restituito, il metodo dovrebbe apparire diverso. Dovrei usare invece il Response
tipo come tipo di ritorno?
{content: ''}
), una risposta 204 sarebbe inappropriata.