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 nullda 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 Contentrisposta o dovrebbe essere 404invece 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 Responsetipo come tipo di ritorno?
{content: ''}), una risposta 204 sarebbe inappropriata.